非捕获组匹配 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));

请参阅正则表达式演示。

  • (^|s) - 组 1(后来在替换模式中的$1占位符的帮助下称为(:与字符串开头或空格匹配的捕获组
  • Äpfel - 搜索词
  • (?=$|s) - 积极的前瞻,要求在当前位置右侧立即结束字符串或空格。

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

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

相关内容

  • 没有找到相关文章

最新更新