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