2012-08-22 27 views
7

En el ejemplo siguiente, la salida es verdadera. Es cookie y también coincide con cookie14214 Supongo que es porque la cookie está en la cadena cookie14214. ¿Cómo afino esta unión para obtener solo cookie?JavaScript Regex no coincide con la cadena exacta

var patt1=new RegExp(/(biscuit|cookie)/i); 
document.write(patt1.test("cookie14214")); 

¿Es esta la mejor solución?

var patt1=new RegExp(/(^biscuit$|^cookie$)/i); 

Respuesta

5

La respuesta depende de su asignación de caracteres que rodean la palabra cookie. Si la palabra es que aparezca estrictamente en una línea por sí mismo, entonces:

var patt1=new RegExp(/^(biscuit|cookie)$/i); 

Si desea permitir que los símbolos (espacios, ., ,, etc), pero no valores alfanuméricos, intentar algo como:

var patt1=new RegExp(/(?:^|[^\w])(biscuit|cookie)(?:[^\w]|$)/i); 

Segunda expresiones regulares, explicó:

(?:     # non-matching group 
    ^    # beginning-of-string 
    | [^\w]   # OR, non-alphanumeric characters 
) 

(biscuit|cookie) # match desired text/words 

(?:     # non-matching group 
    [^\w]   # non-alphanumeric characters 
    | $    # OR, end-of-string 
) 
+0

has probado esto? No creo que puedas usar el lookahead negativo después de la cadena deseada. – jbabey

+0

@jbabey Sí, probado con firebug; Además, las expresiones regulares no usan ningún lookaheads (positivo o negativo). El segundo está usando un grupo que no coincide, '(?:', Si eso es lo que estás confundiendo con '(?!' – newfurniturey

+0

¡nunca antes había visto esa sintaxis, es bueno saber! – jbabey

2

Sí, o utilice los límites de las palabras. Tenga en cuenta que esto coincidirá con great cookies pero no con greatcookies.

var patt1=new RegExp(/(\bbiscuit\b|\bcookie\b)/i); 

Si desea hacer coincidir la cadena exacta cookie, entonces usted ni siquiera necesita expresiones regulares, sólo tiene que utilizar ==, ya /^cookie$/i.test(s) es básicamente el mismo que s.toLowerCase() == "cookie".

+0

+1, a pesar de usar '' == en lugar de '' ===: P – jbabey

Cuestiones relacionadas