繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM