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

JavaScript正则表达式中与空白边界匹配的非捕获组,javascript,regex,replace,word-boundaries,Javascript,Regex,Replace,Word Boundaries,我有这个功能,可以找到整个单词并替换它们。它标识空间,但不应替换它们(即,不捕获它们) function asd (sentence, word) { str = sentence.replace(new RegExp('(?:^|\\s)' + word + '(?:$|\\s)'), "*****"); return str; }; 然后我有以下字符串: var sentence = "ich mag Äpfel"; var word = "Äpfel"; 结果应该是

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

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*****"
我要买后者

如何使其能够识别空格,但在替换单词时忽略空格

起初,这看起来像是重复的,但我没有找到这个问题的答案,这就是为什么我要问它


谢谢

您应该通过在替换模式中使用带有替换backreference的捕获组(而不是非捕获组)将匹配的空白放回,并且您还可以利用右空白边界的前瞻,这在连续匹配的情况下非常方便:

功能asd(句子、单词){
str=句子。替换(新的RegExp(“(^ |\\s)”+word+”(?=$|\\s)”),“$1****”;
返回str;
};
var句子=“ich magÄpfel”;
var word=“Äpfel”;

console.log(asd(句子、单词))您知道如何使它能够处理以连字符开头的单词,而不是以字符串或空格开头的单词吗?示例:在“ich gehe ins fitness studio”@N中查找并替换“***”的“studio”。您可以将其添加到左侧边界:
(^ |\\s)
->
(^ |[-\\s])
。如果您决定实现Unicode单词边界,问题会更大,因为最好的方法是使用XRegExp(如果您计划支持所有浏览器)。