2011-05-06 59 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)" 
相关问题