2010-01-27 21 views
7

Estoy tratando de detectar una ocurrencia de una cadena dentro de una cadena. Pero el código siguiente siempre devuelve "nulo". Obviamente, algo salió mal, pero como soy novato, no lo veo. Estoy esperando a que el código devuelve "verdadero" en lugar de "nulo"Coincidir cadena dinámica usando regex

var searchStr = 'width'; 
var strRegExPattern = '/'+searchStr+'\b/'; 
"32:width: 900px;".match(new RegExp(strRegExPattern,'g')); 

Respuesta

17

Por favor no ponga '/' cuando se pasa de cadena en la opción RegExp

Siguiendo estaría bien

var strRegExPattern = '\\b'+searchStr+'\\b'; 
"32:width: 900px;".match(new RegExp(strRegExPattern,'g')); 
+0

sigue siendo el mismo resultado Mark. http://cld.ly/b616ma –

+0

¿podrías probar con searchStr solo sin la parte '\\ b'? se supone que su cadena debería funcionar sin eso. – YOU

+0

@Fares, necesitas ''\\ b'' con 2' \ 's, no'' \ b''. – kennytm

0

Observe que '\\ b' es una sola barra en una cadena seguida de la letra 'b', '\ b' es el código de escape \b, que no existe, y se contrae a 'b'.

Considere también el escape de metacaracteres en la cadena si pretende que solo coincidan con sus valores literales.

var string = 'width'; 
var quotemeta_string = string.replace(/[^$\[\]+*?.(){}\\|]/g, '\\$1'); // escape meta chars 
var pattern = quotemeta_string + '\\b'; 
var re = new RegExp(pattern); 
var bool_match = re.test(input); // just test whether matches 
var list_matches = input.match(re); // get captured results 
3

Estás mezclando las dos formas de crear expresiones regulares en JavaScript. Si utiliza una expresión regular literal, / es el delimitador de expresiones regulares, el modificador g sigue inmediatamente al delimitador de cierre, y \b es la secuencia de escape para un límite de palabra:

var regex = /width\b/g; 

si lo crea en la forma de una cadena literal para el constructor RegExp, que dejar fuera de los delimitadores de expresiones regulares, se pasa modificadores en forma de un segundo argumento de cadena, y hay que doblar las barras invertidas en las secuencias de escape de expresiones regulares:

var regex = new RegExp('width\\b', 'g'); 

la forma en que está haciendo es decir, el \b se está convirtiendo en un retroceso carácter antes de que llegue al compilador de expresiones regulares; tienes que escapar de la barra diagonal inversa para pasar el procesamiento de cadena de escape literal de cadena de JavaScript. O usa un literal de expresión regular.

Cuestiones relacionadas