var str="Foo bar bar end."
var word="bar"
var regex = new RegExp("([\\s]|^|>)("+word+")(<|[\\s]|$)", "gi");
str=str.replace(regex,' <span class="selected">$2</span> ');
Foo <span class="selected">bar</span> bar end.
爲什麼只有第一bar
改變?
var str="Foo bar bar end."
var word="bar"
var regex = new RegExp("([\\s]|^|>)("+word+")(<|[\\s]|$)", "gi");
str=str.replace(regex,' <span class="selected">$2</span> ');
Foo <span class="selected">bar</span> bar end.
爲什麼只有第一bar
改變?
由於重疊匹配。即,您的上一個捕獲組使用尾隨分隔符。爲了不使用以下字符,請將上一個捕獲組更改爲肯定的先行模式,該模式不會消耗任何字符但會斷言。
var regex = new RegExp("([\\s>]|^)("+word+")(?=[<\\s]|$)", "gi");
str=str.replace(regex,'$1<span class="selected">$2</span>');
非常感謝你 – ozen
@Galipözen歡迎來到StackOverflow http://stackoverflow.com/help/accepted-answer –
問題是您的上一個捕獲組使用尾隨分隔符。使用向前看。或者是一個字的邊界。 –
非常感謝你 – ozen
可以這個字符串'「Foo吧條吧結束。」'在你的情況下考慮? – RomanPerekhrest