Estoy buscando una solución ordenada de RegEx para reemplazar
- Todos los caracteres no alfanuméricos
- Todas las nuevas líneas
- Todas las instancias múltiples de espacio en blanco
Con un solo espacio
Para aquellos que juegan en casa ( lo siguiente funciona )
text.replace(/[^a-z0-9]/gmi, " ").replace(/\s+/g, " ");
Mi pensamiento es que RegEx es probablemente lo suficientemente poderoso como para lograr esto en una sola declaración. Los componentes que creo que necesito son:
[^a-z0-9]
- para eliminar caracteres no alfanuméricos\s+
- coincide con cualquier colección de espacios\r?\n|\r
- coincide con toda la nueva línea/gmi
- global, multilínea, sin distinción entre mayúsculas y minúsculas
Sin embargo, parece que no puedo diseñar la expresión regular de la manera correcta ( 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
javascript
regex
replace
alphanumeric
El general
fuente
fuente
Respuestas:
Tenga en cuenta que eso
\W
deja el guión bajo . Un equivalente corto para[^a-zA-Z0-9]
sería[\W_]
\W
es la negación de la taquigrafía\w
para[A-Za-z0-9_]
caracteres de palabras (incluido el guión bajo)Ejemplo en regex101.com
fuente
\W
también reconocerá los caracteres no latinos como caracteres sin palabras.Jonny 5 me ganó. Iba a sugerir usar el
\W+
sin el\s
como entext.replace(/\W+/g, " ")
. Esto cubre el espacio en blanco también.fuente
\W+
, no[W+]
Bueno, ¡feliz año nuevo a todos!&
y-
. ¿Algun consejo?Como la
[^a-z0-9]
clase de caracteres contiene todo lo que no es alnum, ¡también contiene caracteres blancos!fuente
Bueno, creo que solo necesitas agregar un cuantificador a cada patrón. También lo de retorno de carro es un poco divertido:
editar La
\s
cosa coincide\r
y\n
también.fuente
A vi una publicación diferente que también tenía marcas diacríticas, lo cual es genial
s.replace(/[^a-zA-Z0-9À-ž\s]/g, "")
fuente
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 diferentes navegadores con cadenas de diferentes tamaños.
Así que básicamente usé jsPerf en
Los patrones de expresiones regulares que probé fueron
/[\W_]+/g
/[^a-z0-9]+/gi
/[^a-zA-Z0-9]+/g
Los cargué con una longitud de cadena de caracteres aleatorios
Ejemplo de JavaScript que utilicé
var newstr = str.replace(/[\W_]+/g," ");
Cada ejecución constaba de 50 o más muestras en cada expresión regular, y las ejecuto 5 veces en cada navegador.
¡Vamos a competir con nuestros caballos!
Resultados
A decir verdad, Regex en ambos navegadores (teniendo en cuenta la desviación) era casi indistinguible, sin embargo, creo que si se ejecuta esto aún más veces, los resultados serían un poco más claros (pero no mucho).
Escala teórica para 1 personaje
No tomaría demasiado en estos resultados, ya que esta no es realmente una diferencia significativa, todo lo que realmente podemos decir es que el borde es más lento: o. Además que estaba súper aburrido.
De todos modos, puede ejecutar el punto de referencia para usted.
Jsperf Benchmark aquí
fuente
Para reemplazar con guiones, haga lo siguiente:
fuente