2009-05-20 18 views
60

Esta es una pregunta simple, creo.escapando signo de interrogación en regex javascript

Estoy tratando de buscar la aparición de una cadena en otra cadena usando expresiones regulares en JavaScript, así:

var content ="Hi, I like your Apartment. Could we schedule a viewing? My phone number is: "; 

var gent = new RegExp("I like your Apartment. Could we schedule a viewing? My", "g"); 

if(content.search(gent) != -1){ 
    alert('worked');  
}   

esto no funciona debido al carácter ? .... He intentado escapar de ella con \, pero eso tampoco funciona. ¿Hay alguna otra manera de usar ? literalmente en lugar de como un personaje especial?

Respuesta

16

usted debe utilizar doble barra:

var regex = new RegExp("\\?", "g"); 

¿Por qué? porque en JavaScript el \ también se usa para escapar caracteres en cadenas, entonces: "\?" se convierte en: "?"

Y "\\?", se convierte en "\?"

+0

tiene sentido ... gracias – Andrew

15

Puede delimitar su expresión regular con barras en lugar de comillas y luego una sola barra invertida para escapar del signo de interrogación. Prueba esto:

var gent = /I like your Apartment. Could we schedule a viewing\?/g; 
4

Siempre que tenga una conocida patrón (es decir, no se utiliza una variable para construir una expresión regular), utilice literal notación expresión regular en la que sólo necesita utilizar individuales barras invertidas para escapar metacaracteres de expresiones regulares especiales:

var re = /I like your Apartment\. Could we schedule a viewing\?/g; 
           ^^       ^^ 

cada vez que necesita para construir una expresión regular de forma dinámica, utilice RegExp constructor notación en el que debe barras invertidas dobles para que denotan una barra invertida literal:

var questionmark_block = "\\?"; // A literal ? 
var initial_subpattern = "I like your Apartment\\. Could we schedule a viewing"; // Note the dot must also be escaped to match a literal dot 
var re = new RegExp(initial_subpattern + questionmark_block, "g"); 

una lectura obligada: RegExp: Description al MDN.

Cuestiones relacionadas