2011-05-06 18 views
8

Quiero construir un RegEx en JavaScript que coincida con una palabra pero no con parte de ella. Creo que algo como \ bword \ b funciona bien para esto. Mi problema es que la palabra no se conoce de antemano por lo que me gustaría montar la expresión regular usando una variable que contiene la palabra, que se ajustará algo en la línea de:Cómo usar variables dentro de Expresión regular en Javascript

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

la que me di cuenta, que no funciona. Mi idea es reemplazar palabras específicas en un párrafo con una etiqueta span. ¿Alguien me puede ayudar?

PD: Estoy usando jQuery.

+0

Si cree que '\ bword \ b' funcionará, ¿por qué lo está creando como '\ b (word) \ b'? – Jaymz

+0

porque quiero capturar la palabra dada que no siempre será "palabra". –

Respuesta

13

\ es un carácter de escape en las expresiones regulares y en cadenas.

Dado que está ensamblando la expresión regular de cadenas, debe escapar de las \ s en ellas.

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

debería hacer el truco, aunque no lo he probado.

Sin embargo, probablemente no deba utilizar un global para r (y probablemente tampoco para reg).

+0

gracias por la respuesta, funciona como se esperaba! por cierto, no estoy usando globales, ese fue solo el código simulado para la pregunta. ¡Gracias de nuevo! –

3

No escapará a la barra invertida. Por lo que debe tener:

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

Además, debe escapar caracteres especiales en 'palabra', porque no se sabe si puede tener caracteres especiales de expresiones regulares.

Espero que esto ayude. Cheers

+0

Tu respuesta también es correcta, pero vi la otra primero y funcionó, pero la superé. ¡Gracias! –

+0

@Andre. De nada, me alegro de haberlo ayudado. –

0

Y no escribas expresiones en la variable de expresión regular porque no funciona.

Ejemplo (no funciona):

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

ejemplo, que devuelve la cadena como se esperaba:

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

Utilice esta

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