Andre Garzia
Andre Garzia

Reputation: 983

How to use variables inside Regular Expression in Javascript

I want to build a RegEx in JavaScript that matches a word but not part of it. I think that something like \bword\b works well for this. My problem is that the word is not known in advance so I would like to assemble the regular expression using a variable holding the word to be matched something along the lines of:

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

which I noticed, does not work. My idea is to replace specific words in a paragraph with a span tag. Can someone help me?

PS: I am using jQuery.

Upvotes: 8

Views: 8974

Answers (4)

Mayur Mundekar
Mayur Mundekar

Reputation: 27

Use this

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

Upvotes: 0

primoz060
primoz060

Reputation: 3

And don't write expressions in the regexp variable, because it does not work!

Example(not working):

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

Example, which returns the string as expected:

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

Upvotes: 0

Edgar Villegas Alvarado
Edgar Villegas Alvarado

Reputation: 18344

You're not escaping the backslash. So you should have:

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

Also, you should escape special characters in 'word', because you don't know if it can have regex special characters.

Hope this helps. Cheers

Upvotes: 3

Quentin
Quentin

Reputation: 943163

\ is an escape character in regular expressions and in strings.

Since you are assembling the regular expression from strings, you have to escape the \s in them.

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

should do the trick, although I haven't tested it.

You probably shouldn't use a global for r though (and probably not for reg either).

Upvotes: 13

Related Questions