在javascript中,如何用长度相等的空格替换找到的正则表达式子字符串?

在javascript中,如何用长度相等的空格替换找到的正则表达式子字符串?,javascript,regex,string,Javascript,Regex,String,在javascript中,如果我有 string.replace(new RegExp(regex, "ig"), " ") 这将用一个空格替换所有找到的正则表达式。但如果我想用长度匹配的空格替换所有找到的正则表达式,我该怎么做呢 所以如果regex是\d+,字符串是 "123hello4567" 它变为 " hello " 谢谢如果您只想用空格替换每个数字,请保持简单: var str = "123hello4567"; var res = str.replace(/\d/g,

在javascript中,如果我有

string.replace(new RegExp(regex, "ig"), " ")
这将用一个空格替换所有找到的正则表达式。但如果我想用长度匹配的空格替换所有找到的正则表达式,我该怎么做呢

所以如果regex是
\d+
,字符串是

"123hello4567"
它变为

"   hello    "

谢谢

如果您只想用空格替换每个数字,请保持简单:

var str = "123hello4567";
var res = str.replace(/\d/g,' ');

"   hello    "
这回答了你的例子,但不完全是你的问题。如果正则表达式可以根据字符串匹配不同数量的空格,或者它不像/d那样简单多次,该怎么办?你可以这样做:

var str = "123hello456789goodbye12and456hello12345678again123";
var regex = /(\d+)/;
var match = regex.exec(str);
while (match != null) {
    // Create string of spaces of same length
    var replaceSpaces = match[0].replace(/./g,' ');  
    str = str.replace(regex, replaceSpaces);
    match = regex.exec(str);
}

"   hello      goodbye  and   hello        again   "
它将循环执行正则表达式(而不是将/g用于全局)


就性能而言,通过创建一个长度与match[0]长度相同的新空格字符串,这可能会加快速度。这将删除循环中的regex replace。如果性能不是一个高优先级,这应该可以正常工作。

如果您只想用空格替换每个数字,请保持简单:

var str = "123hello4567";
var res = str.replace(/\d/g,' ');

"   hello    "
这回答了你的例子,但不完全是你的问题。如果正则表达式可以根据字符串匹配不同数量的空格,或者它不像/d那样简单多次,该怎么办?你可以这样做:

var str = "123hello456789goodbye12and456hello12345678again123";
var regex = /(\d+)/;
var match = regex.exec(str);
while (match != null) {
    // Create string of spaces of same length
    var replaceSpaces = match[0].replace(/./g,' ');  
    str = str.replace(regex, replaceSpaces);
    match = regex.exec(str);
}

"   hello      goodbye  and   hello        again   "
它将循环执行正则表达式(而不是将/g用于全局)

就性能而言,通过创建一个长度与match[0]长度相同的新空格字符串,这可能会加快速度。这将删除循环中的regex replace。如果性能不是高优先级,这应该可以正常工作。

替换参数(第二个)到.replace可以是一个函数-此函数依次调用,每个匹配部分都作为第一个参数

知道匹配零件的长度后,可以返回与替换值相同数量的空格

在下面的代码中,我使用
作为替换值来轻松地说明代码

注意:这使用字符串#repeat,这在IE11中不可用(但箭头函数也不可用),但您始终可以使用polyfill和transpiler

let regex=“\\d+”;
log(“123hello4567.replace”(新的RegExp(regex,“ig”),m=>”。重复(m.length))到的替换参数(第2个)可以是一个函数-依次调用此函数,每个匹配部分作为第一个参数

知道匹配零件的长度后,可以返回与替换值相同数量的空格

在下面的代码中,我使用
作为替换值来轻松地说明代码

注意:这使用字符串#repeat,这在IE11中不可用(但箭头函数也不可用),但您始终可以使用polyfill和transpiler

let regex=“\\d+”;

log(“123hello4567.replace”(新的RegExp(regex,“ig”),m=>”。重复(m.length))类似于
.replace(新的RegExp(regex,“ig”),m=>''。重复(m.length))
哇,这确实有效。我也很惊讶@JaromandaX-你应该把它作为一个答案(带解释)发布,以便在出现太多错误答案之前被接受。类似于
.replace(new RegExp(regex,“ig”),m=>'.repeat(m.length))
哇,这真的有效我也很惊讶@JaromandaX-你应该将其作为一个答案(带解释)发布,以便在出现太多错误答案之前被接受。它应该适用于任何通用正则表达式。它应该适用于任何通用正则表达式。
数组(m.length+1)。join(“.”
的IE友好替代品。repeat()
如果你想要一个单行程序。我需要ES5:p
数组(m.length+1)已经太久了。join(“.”
是IE友好的选择,而不是
。repeat()
如果你想要一个单行程序。我需要ES5:p已经太久了