¿Cómo divido una cadena con múltiples separadores en JavaScript? Estoy tratando de dividir tanto en comas como en espacios, pero, AFAIK, la función de división de JS solo admite un separador.
javascript
regex
split
mikemaccana
fuente
fuente
Respuestas:
Pase una expresión regular como parámetro:
Editado para agregar:
Puede obtener el último elemento seleccionando la longitud de la matriz menos 1:
... y si el patrón no coincide:
fuente
(hello world)|\|
cuales todavía no funcionan. ¿Algunas ideas?Puede pasar una expresión regular al operador dividido de Javascript . Por ejemplo:
O, si desea permitir que varios separadores juntos actúen como uno solo:
(Tienes que usar los parensos que no capturan (? :) porque de lo contrario se vuelven a unir en el resultado. O puedes ser inteligente como Aaron y usar una clase de personaje).
(Ejemplos probados en Safari + FF)
fuente
|
como muestra Jesse.Otro método simple pero efectivo es usar split + join repetidamente.
Esencialmente, hacer una división seguida de una unión es como un reemplazo global, por lo que esto reemplaza cada separador con una coma y luego, una vez que todos se reemplazan, se realiza una división final en coma
El resultado de la expresión anterior es:
Ampliando esto, también podría colocarlo en una función:
Uso:
Si usa mucho esta funcionalidad, incluso podría valer la pena considerar el ajuste
String.prototype.split
por conveniencia (creo que mi función es bastante segura; la única consideración es la sobrecarga adicional de los condicionales (menores) y el hecho de que carece de una implementación del argumento límite si se pasa una matriz)Asegúrese de incluir la
splitMulti
función si utiliza este enfoque para el siguiente simplemente lo envuelve :). También vale la pena señalar que algunas personas fruncen el ceño al extender los elementos integrados (ya que muchas personas lo hacen mal y pueden ocurrir conflictos), por lo que si tiene dudas, hable con alguien más mayor antes de usar esto o pregunte por SO :)Uso:
¡Disfrutar!
fuente
for(var i = 0; i < tokens.length; i++)
y nofor(var i = 1; i < tokens.length; i++)
?tokens[1]
a guardar una iteración a medida quetokens[0] == tempchar
nos separamostempchar
después de iterartokens
para terminar. Actualizaré la respuesta en consecuencia gracias @tic :).Vamos a mantenerlo simple: (agregar un "[] +" a su RegEx significa "1 o más")
Esto significa que "+" y "{1,}" son lo mismo.
fuente
Método complicado:
fuente
:/
'('
para/(/g
reemplazar todos los(
elementos,g
es el indicador global de RegExp, por lo que busca todas las apariciones de(
no el primeroPara aquellos de ustedes que desean una mayor personalización en su función de división, escribí un algoritmo recursivo que divide una cadena dada con una lista de caracteres para dividir. Escribí esto antes de ver la publicación anterior. Espero que ayude a algunos programadores frustrados.
El ejemplo anterior devuelve:
["people", "and", "other", "things"]
Nota: la
flatten
función se tomó del Código Rosettafuente
Puede agrupar todos los caracteres que desea utilizar como separadores, ya sea de forma individual o colectiva, en una expresión regular y pasarlos a la función de división. Por ejemplo, podrías escribir:
Y la salida será:
fuente
Tal vez debería hacer algún tipo de reemplazo de cadena para convertir un separador en el otro separador para que solo tenga un separador con el que lidiar en su división.
fuente
Hola, por ejemplo, si has dividido y reemplazado en String 07:05:45 PM
Resultado
fuente
Aquí hay una nueva forma de lograr lo mismo en ES6 :
Tenga en cuenta en esta función:
source
El resultado del código anterior sería:
fuente
Esto devolverá la cadena sin un carácter especial.
fuente
Mi refactor de @Brian responde
fuente
Creo que una de las principales razones por las que necesito esto es dividir las rutas de los archivos en ambos
/
y\
. Es una expresión regular un poco complicada, así que la publicaré aquí como referencia:fuente
Creo que es más fácil si especificas lo que quieres dejar, en lugar de lo que quieres eliminar.
Como si quisieras tener solo palabras en inglés, puedes usar algo como esto:
Ejemplos (ejecutar fragmento):
fuente
A partir de la solución @ stephen-sweriduk (¡eso fue lo más interesante para mí!), La modifiqué ligeramente para hacerla más genérica y reutilizable:
y entonces
que devuelve como el original:
fuente
Mostrar fragmento de código
fuente
Proporcionaré una implementación clásica para dicha función. El código funciona en casi todas las versiones de JavaScript y de alguna manera es óptimo.
Solo código puro:
Puede ver el código que se ejecuta en el patio de recreo: https://codeguppy.com/code.html?IJI0E4OGnkyTZnoszAzf
fuente
No conozco el rendimiento de RegEx, pero aquí hay otra alternativa para que RegEx aprovecha HashSet nativo y funciona en su lugar con complejidad O (max (str.length, delimeter.length)):
fuente
No es la mejor manera, pero funciona para dividir con separadores / delimitadores múltiples y diferentes
html
javascript
fuente
Yo uso regexp:
fuente