2016-04-22 62 views
2
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改變?

+0

問題是您的上一個捕獲組使用尾隨分隔符。使用向前看。或者是一個字的邊界。 –

+0

非常感謝你 – ozen

+0

可以這個字符串'「Foo吧條吧結束。」'在你的情況下考慮? – RomanPerekhrest

回答

2

由於重疊匹配。即,您的上一個捕獲組使用尾隨分隔符。爲了不使用以下字符,請將上一個捕獲組更改爲肯定的先行模式,該模式不會消耗任何字符但會斷言。

var regex = new RegExp("([\\s>]|^)("+word+")(?=[<\\s]|$)", "gi"); 
str=str.replace(regex,'$1<span class="selected">$2</span>'); 
+0

非常感謝你 – ozen

+1

@Galipözen歡迎來到StackOverflow http://stackoverflow.com/help/accepted-answer –