2010-10-08 6 views
29

Regex test() me da problemas en Firefox y Chrome, pero funciona sin problemas en Opera y Safari.regex.test() solo funciona en cualquier otro momento

código problemático:

var pattern = /(\s+(?!\$\w+)|(^(?!\$\w+)))/g; 
if(pattern.test(String(id).replace(/\s+OR|AND\s+/g, ''))) { 
searchError("You suck."); 
return 1; 
} 

Cuando se pasa en el espacio en blanco, bloquea cada vez. Cuando pasas algo como '$a b', funcionará de forma alternativa en Firefox/Chrome. EXTRAÑO.

+0

Reemplace 'id' con algo estático y vea si eso funciona. –

+1

omg :-) parece un error divertido ... –

Respuesta

59

Es un error en el motor de RegEx, a similar question with the same issue came up here.

Desde mi respuesta a esa pregunta: Es un error con la forma en expresiones regulares son implementados en ECMAScript 3, there's a great post on the details here.

Los fundamentos son un /regex/ con el modificador g no se reinicia correctamente, así que múltiples llamadas .test() alternan entre true y false si todo el mundo debe ser true, cada otras llamadas se restablece con éxito.

+0

Oh snap. Ustedes son geniales. Gracias por las respuestas rápidas y los enlaces útiles (este fue un problema para buscar soluciones). – Jacksonkr

+1

@Jackson, si esto responde su pregunta (debería), luego haga clic en la pequeña marca de verificación, a la izquierda, para marcarla como la respuesta aceptada. –

+0

@Brock Adams Esto debe haber salteado mi atención. Gracias por el recordatorio. – Jacksonkr

Cuestiones relacionadas