用字符串替换多个相同的字符

时间:2018-10-04 02:28:38

标签: javascript regex string

我要使用Javascript替换:

This is a test, please complete ____.

具有:

This is a test, please complete %word%.

下划线的数量不一致,因此我不能仅使用str.replace('_____', '%word%')之类的东西。

我尝试过str.replace(/(_)*/g, '%word%'),但是没有用。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

删除捕获组,并确保_+重复(至少出现一次,与尽可能多的_相匹配):

const str = 'This is a test, please complete ____.';
console.log(
  str.replace(/_+/g, '%word%')
);

正则表达式

/(_)*/

是用简单的语言表示:匹配零个或多个下划线,这当然不是您想要的。这将匹配字符串中每个的位置(下划线之间的字符串中的位置除外)。

答案 1 :(得分:0)

我将建议一种稍微不同的方法。与其维持当前的句子,不如保留以下内容:

This is the {$1} test, please complete {$2}.

如果要渲染这句话,请使用正则表达式替换用下划线替换占位符:

var sentence = "This is the {$1} test, please complete {$2}.";
var show = sentence.replace(/\{\$\d+\}/g, "____");
console.log(show);

当您要替换给定的占位符时,也可以使用目标正则表达式替换。例如,要定位第一个占位符,您可以使用:

var sentence = "This is the {$1} test, please complete {$2}.";
var show = sentence.replace(/\{\$1\}/g, "first");
console.log(show);

这是一个相当健壮和可扩展的解决方案,并且比只对所有下划线进行一次全面覆盖更准确。