2011-05-06 38 views
8

我想在JavaScript中構建一個匹配單詞但不包含它的部分的RegEx。我認爲像\ bword \ b這樣的東西很適合這個。我的問題是,這個詞是事先不知道,所以我想組裝使用變量保存這個詞來沿着線的東西相匹配的正則表達式:如何在Javascript中使用正則表達式中的變量

r = "\b(" + word + ")\b"; 
reg = new RegExp(r, "g"); 
lexicon.replace(reg, "<span>$1</span>" 

,我注意到了,不起作用。我的想法是用span標籤替換段落中的特定單詞。有人能幫我嗎?

PS:我正在使用jQuery。

+0

如果你覺得'\ bword \ B'將工作,爲什麼你創建它爲'\ b(word)\ b'? – Jaymz 2011-05-06 20:47:57

+0

,因爲我想捕捉給定的單詞,它並不總是「單詞」。 – 2011-05-06 22:12:46

回答

13

\是字符串中正則表達式中的轉義字符。

由於您正在從字符串組裝正則表達式,因此您必須在其中跳過\

r = "\\b(" + word + ")\\b"; 

應該做的伎倆,雖然我還沒有測試過它。

你可能不應該使用全局的r雖然(也可能不是reg要麼)。

+0

感謝您的回答,它按預期工作!順便說一句,我沒有使用全局變量,這只是簡單的模擬代碼的問題。再次感謝! – 2011-05-06 21:02:29

3

你不是在逃避反斜槓。所以,你應該有:

r = "\\b(" + word + ")\\b"; //Note the double backslash 
reg = new RegExp(r, "g"); 

此外,您應該逃避「字」的特殊字符,因爲你不知道它是否能有正則表達式的特殊字符。

希望這會有所幫助。乾杯

+0

你的回答也是正確的,但我首先看到了另一個,它的工作,但我碰到它。謝謝! – 2011-05-06 21:03:14

+0

@Andre。不客氣,很高興爲您提供幫助。 – 2011-05-06 21:24:48

0

並且不要在regexp變量中寫入表達式,因爲它不起作用!

例(不工作):

var r = "^\\w{0,"+ maxLength-1 +"}$"; // causes error 
var reg = new RegExp(r, "g"); 

例子,它返回預期的字符串:

var m = maxLength - 1; 
var r = "^\\w{0,"+ m +"}$"; 
var reg = new RegExp(r, "g"); 
0

使用此

r = "(\\\b" +word+ "\\\b)" 
相關問題