Esta es la solución más completa que encomtrarás compartir, sin embargo mírala detenidamente y analiza si se adapta a tu proyecto.
Solución:
Pase una expresión regular como parámetro:
js> "Hello awesome, world!".split(/[s,]+/)
Hello,awesome,world!
Editado para agregar:
Puede obtener el último elemento seleccionando la longitud del array menos 1:
>>> bits = "Hello awesome, world!".split(/[s,]+/)
["Hello", "awesome", "world!"]
>>> bit = bits[bits.length - 1]
"world!"
… y si el patrón no coincide:
>>> bits = "Hello awesome, world!".split(/foo/)
["Hello awesome, world!"]
>>> bits[bits.length - 1]
"Hello awesome, world!"
Puede pasar una expresión regular al operador de división de Javascript. Por ejemplo:
"1,2 3".split(/,| /)
["1", "2", "3"]
O, si desea permitir que varios separadores actúen juntos como uno solo:
"1, 2, , 3".split(/(?:,| )+/)
["1", "2", "3"]
(Tienes que usar los paréntesis que no capturan (? 🙂 porque, de lo contrario, se empalman de nuevo en el resultado. O puedes ser inteligente como Aaron y usar una clase de personaje).
(Ejemplos probados en Safari + FF)
Otro método simple pero efectivo es usar dividir + unir repetidamente.
"a=b,c:d".split('=').join(',').split(':').join(',').split(',')
Esencialmente, hacer una división seguida de una unión es como un reemplazo global, por lo que reemplaza cada separador con una coma y luego, una vez que se reemplazan todos, hace una división final en coma
El resultado de la expresión anterior es:
['a', 'b', 'c', 'd']
Ampliando esto, también podría colocarlo en una función:
function splitMulti(str, tokens)
var tempChar = tokens[0]; // We can use the first token as a temporary join character
for(var i = 1; i < tokens.length; i++)
str = str.split(tokens[i]).join(tempChar);
str = str.split(tempChar);
return str;
Uso:
splitMulti('a=b,c:d', ['=', ',', ':']) // ["a", "b", "c", "d"]
Si usa mucho esta funcionalidad, incluso podría valer la pena considerar envolver 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 de límite si un array esta pasado).
Asegúrese de incluir el splitMulti
si usa este enfoque para lo 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 surgir conflictos), por lo que si tiene dudas, hable con alguien más senior antes de usar esto o pregunte en SO 🙂
var splitOrig = String.prototype.split; // Maintain a reference to inbuilt fn
String.prototype.split = function ()
if(arguments[0].length > 0)
if(Object.prototype.toString.call(arguments[0]) == "[object Array]" ) // Check if our separator is an array
return splitMulti(this, arguments[0]); // Call splitMulti
return splitOrig.apply(this, arguments); // Call original split maintaining context
;
Uso:
var a = "a=b,c:d";
a.split(['=', ',', ':']); // ["a", "b", "c", "d"]
// Test to check that the built-in split still works (although our wrapper wouldn't work if it didn't as it depends on it :P)
a.split('='); // ["a", "b,c:d"]
¡Disfrutar!
Aquí tienes las reseñas y puntuaciones
Agradecemos que quieras añadir valor a nuestro contenido aportando tu veteranía en las explicaciones.