[英]Non-capturing group matching whitespace boundaries in JavaScript regex
我有这个功能可以找到整个单词并应该替换它们。 它标识空间但不应替换它们,即不捕获它们。
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;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.