JavaScript正则表达式中的非捕获组匹配空白边界

我有此功能可以找到整个单词,应该替换它们。它标识空间,但不应替换它们,即不捕获它们。

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));

请参阅regex演示

细节

  • (^|\s)-第1组(后来$1在替换模式中借助占位符指代):与字符串开头或空格匹配的捕获组
  • Äpfel -搜索词
  • (?=$|\s) -正向超前查询,需要在当前位置的右侧紧接字符串或空格的结尾。

注意:如果word可以包含特殊的正则表达式元字符,请对其进行转义

function asd (sentence, word) {
     str = sentence.replace(new RegExp('(^|\\s)' + word.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + '(?=$|\\s)'), "$1*****");
     return str;
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章