簡體   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