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

问题描述 投票:3回答:1

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

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*****"

我得到后者。

如何使它识别空格,但是在替换单词时忽略它?

起初,这似乎是重复的,但是我没有找到这个问题的答案,这就是为什么我问这个问题。

谢谢

javascript regex replace word-boundaries
1个回答
5
投票

您应该通过在替换模式中使用带有替换后向引用的capturing组(而不是non-capturing一个组)来放回匹配的空格,并且您还可以在右边使用先行方式空格边界,在连续匹配的情况下很方便:

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 demo

详细信息

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

NOTE:如果word可以包含特殊的正则表达式元字符,则escape them

function asd (sentence, word) {
     str = sentence.replace(new RegExp('(^|\\s)' + word.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + '(?=$|\\s)'), "$1*****");
     return str;
};
© www.soinside.com 2019 - 2024. All rights reserved.