2010-07-05 25 views
11

Hemos estado utilizando la siguiente js/expresiones regulares para buscar y reemplazar todos los caracteres no alfanuméricos, aparte de - y +expresiones regulares (en JavaScript buscar/reemplazar) - coincide con los caracteres no alfanuméricos, pero ignoran - y +

outputString = outputString.replace(/[^\w|^\+|^-]*/g, "");

Sin embargo, no funciona del todo, no reemplaza el^y | caracteres. No puedo evitar preguntarme si esto tiene algo que ver con^y | siendo utilizado como metacaracteres en la expresión regular.

He intentado cambiar para usar [\W|^+|^-], pero eso reemplaza a - y +. Pensé que posiblemente una afirmación de anticipación podría ser la respuesta, pero no estoy muy seguro de cómo implementarlos.

¿Alguien tiene una idea de cómo lograr esto?

Respuesta

16

Las clases de caracteres no hacen alternancia, de ahí la razón por la | es literal, y el ^ deben estar en el inicio de la clase para tener efecto (si no se lo trata, literalmente.)

Utilice esta:

[^\w+-]+ 

(Además, si - no es el último, debe escaparse como \- dentro de una clase de caracteres, así que tenga cuidado si se pueden agregar más caracteres a la lista de excepciones).

También puede hacerlo con una búsqueda negativa hacia delante como esto:

(?![+-])\W 

Nota: Usted no quiere un * o + después de eso \W, ya que la búsqueda hacia delante sólo se aplica a la inmediata carácter (y la bandera g hace que la sustitución se repita hasta que se complete).

También tenga en cuenta que \w y \W consideran _ como un carácter de palabra. Si eso no se desea, entonces para reemplazarlo puede usar (?![+-])[\W_] (o usar rangos explícitos en las primeras expresiones).

+0

Hola Peter, gracias - eso es genial. [^\w+-]+ funcionó muy bien! Y gracias por la información adicional, muy útil. –

Cuestiones relacionadas