2011-04-01 9 views
13

La expresión regular permite caracteres que son: alfanumérica, espacio, '-', '_', '&', '()' y '/'JavaScript Regex, ¿dónde usar los caracteres de escape?

Esta es la expresión

[\s\/\)\(\w&-] 

tengo probado esto en varios probadores en línea y sé que funciona, simplemente no puedo hacer que funcione correctamente en el código. Recibo errores de sntantax con cualquier cosa que intento ... alguna sugerencia?

var programProductRegex = new RegExp([\s\/\)\(\w&-]); 
+0

No hay necesidad de escapar paréntesis en una clase de caracteres. es decir, use: '/ [- \ s \ /() \ w &] /' y recuerde que un guion debe ser escapado, excepto al principio o al final de la clase. Consulte: [regular-expressions.info] (http://www.regular-expressions.info/) para obtener un excelente tutorial. – ridgerunner

+0

Noté en el archivo jQuery.uni-form.js que las barras diagonales internas dentro de una clase de caracteres no se están escapando, pero el código funciona bien. ¿Es posible que el escape de barras diagonales en una clase de personaje sea opcional? Me gustaría saber en beneficio del paquete de Javascript de TextMate, también utilizado por Sublime Text 2. –

+0

@ScottLahteine ​​Creo (nunca encontré documentación sobre esto) que solo en los literales RegEx '/ slashes \/must /' escapé . Cuando se utiliza el constructor 'RegExp', no se debe haber escapado – Sebastian

Respuesta

27

Usted puede utilizar la sintaxis de expresiones regulares:

var programProductRegex = /[\s\/\)\(\w&-]/; 

Se utilizan barras inclinadas para delimitar el patrón de expresión.

Si utiliza el constructor de objetos RegExp, debe pasar una cadena. Como las barras diagonales inversas son caracteres de escape especiales dentro de cadenas de JavaScript y también son caracteres de escape en expresiones regulares, debe usar dos barras diagonales inversas para realizar un escape de expresiones regulares dentro de una cadena. El código equivalente utilizando una cadena sería entonces:

var programProductRegex = new RegExp("[\\s\\/\\)\\(\\w&-]"); 

Todas las barras invertidas que se encontraban en la expresión regular originales deben ser escapado en la cadena de interpretarse correctamente como barras invertidas.

Por supuesto, la primera opción es mejor. El constructor es útil cuando obtienes una cadena de algún lugar y quieres hacer una expresión regular de ella.

var programProductRegex = new RegExp(userInput); 
+0

¿por qué hay que poner uno al final, es básicamente un delímetro? – Avien

+0

sí, es un delimitador – 3rgo

+0

Tenga en cuenta también que no necesita escaparse'() 'entre paréntesis en una clase de caracteres. – ridgerunner

1

incluya su expresión regular con delimitadores:

var programProductRegex = /[\s\/)(\w&-]/; 
+0

@downvoter: ¿puedo tener alguna razón? – Toto

+0

Probablemente porque está pasando un literal RegExp a un constructor RegExp.Si tiene un literal RegExp, no es necesario usar el constructor RegExp. – Aaronius

6

Si está utilizando una cadena y quiere escapar caracteres como (, tiene que escribir \\( (es decir, la escritura barra invertida, entonces el paréntesis de apertura => escapándolo).

Si está utilizando el objeto RegExp, sólo necesita una barra invertida para cada personaje (como \()

+0

genial, ty. No me di cuenta de que había una diferencia – Avien

Cuestiones relacionadas