gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:57:57 24 4
gpt4 key购买 nike

我有这个功能可以找到完整的单词并替换它们。它识别空格但不应替换它们,即不捕获它们。

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 demo .

详情

  • (^|\s) - 第 1 组(稍后在替换模式中借助 $1 占位符进行引用):匹配任一开始的捕获组字符串或空格
  • Äpfel - 一个搜索词
  • (?=$|\s) - 要求字符串结尾或空格紧接在当前位置右侧的正向前瞻。

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

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

关于javascript - JavaScript 正则表达式中的非捕获组匹配空白边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49904525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com