2010-02-26 13 views
9

¿Por qué es que JSLint devuelve un 'escape malo' en la siguiente línea de JavaScript?¿Por qué JSLint devuelve 'mal escape' en esta línea de código?

param = param.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 

De la documentación JSLint pensé que esto estaría bien ya que el literal de expresiones regulares es precedida por un paréntesis:

Las expresiones regulares son escritos en un escueto y la notación críptica. JSLint busca problemas que pueden causar problemas de portabilidad. También intenta para resolver ambigüedades visuales por recomendando un escape explícito.

La sintaxis de JavaScript para los literales de expresión regulares sobrecarga el carácter/ . Para evitar la ambigüedad, JSLint espera que el carácter anterior una expresión regular literal es un (o = o: o, carácter

+2

¿Por qué utiliza clases de caracteres para caracteres individuales? –

+0

¿Estás seguro de que "escape malo" se refiere al carácter que precede a una expresión regular? El mensaje de error y la descripción entre comillas no parecen coincidir. – Joey

+0

@Johannes: No se refiere a las expresiones regulares, pero puedo ver cómo se podría pensar eso. Es la única sección en las instrucciones donde se menciona "escape". – Guffa

Respuesta

13

No es la expresión regular que se queja de usted se está escapando personajes de la.. cadenas de reemplazo que no necesita escapar del todo

El caracteres [y] no tienen un significado especial en una cadena ordinaria, que no tiene que escapar de ellos:.

param = param.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]"); 

Nota: Como Anon señaló, no es necesario utilizar un conjunto de caracteres para un solo carácter:

param = param.replace(/\[/,"\\[").replace(/\]/,"\\]"); 

También puede coincidir con los dos personajes en una sola expresión regular, coger lo que coinciden y utilizar en su lugar. Si desea reemplazar más de la primera ocurrencia, desea utilizar la opción global:

param = param.replace(/(\[|\])/g,"\\$1"); 
+0

Thx Guffa. Estaba a punto de actualizar, ya que después de jugar con él un poco más me di cuenta de que tenía un escape extra allí. Mis habilidades de expresión regular son terribles, esto es parte de una función de "querystring" que encontré en algún sitio web para recuperar los parámetros de la URL, así que no lo había cuestionado mucho, ya que estaba funcionando. Veo que tu versión de una línea es mucho mejor, ¡gracias! – SBUJOLD

Cuestiones relacionadas