我要使用Javascript替换:
This is a test, please complete ____.
具有:
This is a test, please complete %word%.
下划线的数量不一致,因此我不能仅使用str.replace('_____', '%word%')
之类的东西。
我尝试过str.replace(/(_)*/g, '%word%')
,但是没有用。有什么建议吗?
答案 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);
这是一个相当健壮和可扩展的解决方案,并且比只对所有下划线进行一次全面覆盖更准确。