2011-02-24 10 views

Respuesta

59

Echa un vistazo a la implementación de la función de PHP preg_quote de PHP.JS, que debe hacer lo que necesita:

http://phpjs.org/functions/preg_quote:491

Los caracteres especiales de expresiones regulares son: . \ + * ? [^] $ () { } = ! < > | : -

+0

Naaah estoy configurado manualmente en patrones listos. Tal vez más tarde creará una función para disminuir el tamaño del archivo. ¡Así que me olvidé de + =! <>: y - ¿esa es la lista completa? Gracias amigo;) – Somebody

+0

Supongo que sabes lo que estás diciendo. :) ok, la respuesta está cerrada, lo acepto un poco más tarde, tal vez alguien tenga que agregar. :) – Somebody

+2

Si estás escapando con str_replace, primero debes escapar \. En la lista anterior, si a. se reemplaza por \., \. luego será reemplazado por \\., que no es lo que se quiere. –

9

Según this site, la lista de los personajes de escapar es

[, la barra invertida \, el acento circunflejo ^, el signo del dólar $, el período o punto, la barra vertical o símbolo de canalización |., el signo de interrogación?, el asterisco o estrella *, el signo más +, el corchete de apertura (y el corchete de cierre).

Además de eso, tiene que escapar caracteres que son interpretados por el intérprete de Javascript como final de la cadena, es decir, ya sea ' o ".

+0

No sé qué hacer con ese sitio. Cubre muchos sabores de RegEx y no especifica a cuál de los que esta lista se aplica. – BaldEagle

3

El El guión (-) debe escaparse cuando está entre corchetes y no está ubicado al inicio o al final por ej. necesidad de escapar - para

[a-z0-9\-_]+ 

No hay necesidad de escapar - para

[a-z0-9_-]+ 
1

base fuera de la respuesta de Tatu Ulmanen, mi solución en C# tomó esta forma:

private static List<string> RegexSpecialCharacters = new List<string> 
{ 
    "\\", 
    ".", 
    "+", 
    "*", 
    "?", 
    "[", 
    "^", 
    "]", 
    "$", 
    "(", 
    ")", 
    "{", 
    "}", 
    "=", 
    "!", 
    "<", 
    ">", 
    "|", 
    ":", 
    "-" 
}; 


foreach (var rgxSpecialChar in RegexSpecialCharacters) 
       rgxPattern = input.Replace(rgxSpecialChar, "\\" + rgxSpecialChar); 

Tenga en cuenta que He cambiado las posiciones de '\' y '.', No procesar las barras primero dará lugar a la duplicación de las '\' s

0

Estaba buscando esta lista con respecto a la configuración "no-inútil-escape" de ESLint para reg-ex. Y descubrió que algunos de estos caracteres mencionados no necesitan ser escapados para una expresión regular en JS. La lista más larga en la otra respuesta aquí es para PHP, que requiere que se escapen los caracteres adicionales.

En this github issue for ESLint, aproximadamente a la mitad, el usuario not-an-aardvark explica por qué el carácter al que se hace referencia en el problema es un personaje que tal vez debería escapar.

en JavaScript, un personaje que necesita ser escapado es una syntax character, o uno de estos:

^ $ \ . * + ? () [ ] { } |

La respuesta a la cuestión github he vinculado al anterior incluye explicación sobre "Anexo B" semántica (que no conozco demasiado) que permite que 4 de los personajes mencionados anteriormente sean descamados: ) ] { }.

Otra cosa a tener en cuenta es que escaparse de un personaje que no requiere escaparse no hará ningún daño (excepto tal vez si estás tratando de escapar del personaje de escape). Por lo tanto, mi regla empírica personal es: "En caso de duda, escape"

Cuestiones relacionadas