test regulares regexp probar online expresiones example javascript regex replace alphanumeric

regulares - Regex JavaScript: Reemplaza todos los caracteres que no sean Alpha Numeric, New Lines y Multiple White Space con un espacio



regex javascript online (6)

A vio una publicación diferente que también tenía marcas diacríticas, lo cual es genial

s.replace(/[^a-zA-Z0-9À-ΕΎ/s]/g, "")

Estoy buscando una buena solución RegEx para reemplazar

  • Todos los personajes no alfanuméricos
  • Todas las NewLines
  • Todas las instancias múltiples de espacio en blanco

Con un solo espacio

Para aquellos que juegan en casa ( el siguiente funciona )

text.replace(/[^a-z0-9]/gmi, " ").replace(//s+/g, " ");

Mi pensamiento es RegEx es probablemente lo suficientemente poderoso como para lograr esto en una declaración. Los componentes que creo que necesitan son

  • [^a-z0-9] - para eliminar caracteres no alfanuméricos
  • /s+ - coincide con cualquier colección de espacios
  • /r?/n|/r - unir todas las líneas nuevas
  • /gmi - global, multilínea, sin distinción de mayúsculas y minúsculas

Sin embargo, no puedo darle el estilo correcto a la expresión regular ( lo siguiente no funciona )

text.replace(/[^a-z0-9]|/s+|/r?/n|/r/gmi, " ");

Entrada

234&^%,Me,2 2013 1080p x264 5 1 BluRay S01(*&asd 05 S1E5 1x05 1x5

Salida deseada

234 Me 2 2013 1080p x264 5 1 BluRay S01 asd 05 S1E5 1x05 1x5


Bueno, creo que solo necesitas agregar un cuantificador a cada patrón. También el asunto del retorno del carruaje es un poco gracioso:

text.replace(/[^a-z0-9]+|/s+/gmi, " ");

edita Lo que coincide con /r y /n también.


Como la clase de caracteres [^a-z0-9] contiene todo lo que no es alnum, también contiene caracteres blancos.

text.replace(/[^a-z0-9]+/gi, " ");


Este es un viejo post mío, las respuestas aceptadas son buenas en su mayor parte. Sin embargo, decidí comparar cada solución y otra obvia (solo por diversión). Me preguntaba si había una diferencia entre los patrones de expresiones regulares en buscadores de diferencias con cadenas de diferentes tamaños.

Así que, básicamente, utilicé jsPerf en

  • Prueba en Chrome 65.0.3325 / Windows 10 0.0.0
  • Pruebas en Edge 16.16299.0 / Windows 10 0.0.0

Los patrones regex que probé fueron

  • /[/W_]+/g
  • /[^a-z0-9]+/gi
  • /[^a-zA-Z0-9]+/g

Los cargué con una longitud de cadena de caracteres aleatorios

  • longitud 5000
  • longitud 1000
  • longitud 200

Ejemplo javascript utilicé var newstr = str.replace(/[/W_]+/g," ");

Cada ejecución consistió en 50 o más muestras en cada expresión regular, y las ejecuté 5 veces en cada navegador.

Vamos a competir con nuestros caballos!

Resultados

Chrome Edge Chars Pattern Ops/Sec Deviation Op/Sec Deviation ------------------------------------------------------------------------ 5,000 /[/W_]+/g 19,977.80 1.09 10,820.40 1.32 5,000 /[^a-z0-9]+/gi 19,901.60 1.49 10,902.00 1.20 5,000 /[^a-zA-Z0-9]+/g 19,559.40 1.96 10,916.80 1.13 ------------------------------------------------------------------------ 1,000 /[/W_]+/g 96,239.00 1.65 52,358.80 1.41 1,000 /[^a-z0-9]+/gi 97,584.40 1.18 52,105.00 1.60 1,000 /[^a-zA-Z0-9]+/g 96,965.80 1.10 51,864.60 1.76 ------------------------------------------------------------------------ 200 /[/W_]+/g 480,318.60 1.70 261,030.40 1.80 200 /[^a-z0-9]+/gi 476,177.80 2.01 261,751.60 1.96 200 /[^a-zA-Z0-9]+/g 486,423.00 0.80 258,774.20 2.15

A decir verdad, Regex en ambos navegadores (teniendo en cuenta la desviación) era casi indistinguible, sin embargo, creo que si funcionara aún más veces, los resultados serían un poco más claros (pero no por mucho).

Escala teórica para 1 personaje

Chrome Edge Chars Pattern Ops/Sec Scaled Op/Sec Scaled ------------------------------------------------------------------------ 5,000 /[/W_]+/g 19,977.80 99,889,000 10,820.40 54,102,000 5,000 /[^a-z0-9]+/gi 19,901.60 99,508,000 10,902.00 54,510,000 5,000 /[^a-zA-Z0-9]+/g 19,559.40 97,797,000 10,916.80 54,584,000 ------------------------------------------------------------------------ 1,000 /[/W_]+/g 96,239.00 96,239,000 52,358.80 52,358,800 1,000 /[^a-z0-9]+/gi 97,584.40 97,584,400 52,105.00 52,105,000 1,000 /[^a-zA-Z0-9]+/g 96,965.80 96,965,800 51,864.60 51,864,600 ------------------------------------------------------------------------ 200 /[/W_]+/g 480,318.60 96,063,720 261,030.40 52,206,080 200 /[^a-z0-9]+/gi 476,177.80 95,235,560 261,751.60 52,350,320 200 /[^a-zA-Z0-9]+/g 486,423.00 97,284,600 258,774.20 51,754,840

No me gustaría mucho en estos resultados, ya que no se trata de diferencias significativas, todo lo que realmente podemos decir es que Edge es más lento: o. Además de que estaba súper aburrido.

De todos modos, puedes ejecutar el punto de referencia por ti mismo.

Jsperf Benchmark aquí


Jonny 5 me ganó. Iba a sugerir el uso de /W+ sin el /s como en text.replace(//W+/g, " ") . Esto cubre el espacio en blanco también.


Tenga en cuenta que /W deja el guión bajo . Un corto equivalente para [^a-zA-Z0-9] sería [/W_]

text.replace(/[/W_]+/g," ");

/W es la negación de la shorthand /w para los caracteres de las palabras [A-Za-z0-9_] (incluido el guión bajo)

Ejemplo en regex101.com