javascript - ¿Por qué RegExp genera un error de "quantificador inesperado" en IE8?
Tengo un error de Javascript que me ha sido reportado y, desafortunadamente, no tengo idea de cómo reproducirlo. Las herramientas de desarrollo de IE8 reportan el siguiente error: Cuantificador inesperado. La siguiente fila produce el error:
var g=RegExp(d+"=([^|]*)").exec(j); //output from closure-compiler
Supongo que tengo que escapar correctamente la barra de esa manera (\\|) para solucionar el problema, pero no sé si tengo razón porque no sé cómo reproducir el error.
Cualquier sugerencia o solución es bienvenida.
Gracias.
[ACTUALIZACIÓN]
Los valores de d son las claves de los valores de la cookie __utmz que estoy tratando de recuperar y se enumeran en un arreglo así ["utmccn", "utmcmd", /* ... */]. Bueno, ahora no hay mucho que pueda hacer, estoy en casa con mi amigo la gripe.
Respuesta #1
Un "cuantificador" es un operador de expresiones regulares como * o +. La variable "d" en el código anterior probablemente contiene algo que está siendo interpretado como "código" por el analizador de expresiones regulares, y es inválido. Tienes razón en que necesita ser escapado adecuadamente. Es un problema muy similar al problema de escapar texto que se incluye en el marcado HTML, pero distinto porque la sintaxis en cuestión es completamente diferente (es decir, sintaxis de expresiones regulares frente a sintaxis HTML).
Obviamente, hay muchos caracteres especiales en la sintaxis de expresiones regulares, así que se necesitará una expresión regular bastante complicada para hacer eso. Aquí hay una forma posible de hacer tal cosa:
var quoted = unquoted.replace(/([*+.?|"[\]{}()])/g, '\\$1');
Eso podría no abarcarlos a todos; yo buscaría código que esté más definitivamente probado que algo que un tonto como yo acaba de inventar :-)
Dado que ese código que publicaste parece que puede provenir de alguna biblioteca, puede que quieras revisar la traza de la pila desde el depurador de IE para averiguar dónde comienza el problema.
Respuesta #2
Como regla general, siempre debes escapar los caracteres especiales dentro de las clases de caracteres, nunca sabes cuándo te encontrarás con un motor de expresiones regulares que fallará.
