我有这个函数,可以找到整个单词并应该替换它们。它标识空格,但不应替换它们,即不捕获它们。
function asd (sentence, word) {
str = sentence.replace(new RegExp('(?:^|\s)' + word + '(?:$|\s)'), "*****");
return str;
};
然后我有以下字符串:
var sentence = "ich mag Äpfel";
var word = "Äpfel";
结果应如下所示:
"ich mag *****"
而不是:
"ich mag*****"
我得到了后者。
我怎样才能使它识别空格但在替换单词时忽略它?
起初这似乎是重复的,但我没有找到这个问题的答案,这就是我问它的原因。
谢谢
您应该通过在替换模式中使用带有替换反向引用的捕获组(而不是非捕获组(来放回匹配的空格,并且还可以利用对正确空格边界的预测,这在连续匹配的情况下很方便:
function asd (sentence, word) {
str = sentence.replace(new RegExp('(^|\s)' + word + '(?=$|\s)'), "$1*****");
return str;
};
var sentence = "ich mag Äpfel";
var word = "Äpfel";
console.log(asd(sentence, word));
请参阅正则表达式演示。
详
-
(^|s)
- 组 1(后来在替换模式中的$1
占位符的帮助下称为(:与字符串开头或空格匹配的捕获组 -
Äpfel
- 搜索词 -
(?=$|s)
- 积极的前瞻,要求在当前位置右侧立即结束字符串或空格。
注意:如果word
可以包含特殊的正则表达式元字符,请对其进行转义:
function asd (sentence, word) {
str = sentence.replace(new RegExp('(^|\s)' + word.replace(/[-/\^$*+?.()|[]{}]/g, '\$&') + '(?=$|\s)'), "$1*****");
return str;
};