¿Cómo divido una cadena, rompiendo un personaje en particular?

Tengo esta cadena

'john smith~123 Street~Apt 4~New York~NY~12345'

Usando JavaScript, ¿cuál es la forma más rápida de analizar esto en

var name = "john smith";
var street= "123 Street";
//etc...
0
agregado editado
Puntos de vista: 1

11 Respuestas

Le recomendamos que consulte el subespacio o dividir , ya que esto es realmente no es una tarea adecuada para jQuery

0
agregado

Si Spliter se encuentra , entonces solo

Dividirlo

else return the same string

function SplitTheString(ResultStr) {
    if (ResultStr != null) {
        var SplitChars = '~';
        if (ResultStr.indexOf(SplitChars) >= 0) {
            var DtlStr = ResultStr.split(SplitChars);
            var name  = DtlStr[0];
            var street = DtlStr[1];
        }
    }
}
0
agregado

Puede usar split para dividir el texto.

Como alternativa, también puede usar match de la siguiente manera

<div class="snippet" data-lang="js" data-hide="false"> <div class="snippet-code">

var str = 'john smith~123 Street~Apt 4~New York~NY~12345';
matches = str.match(/[^~]+/g);

console.log(matches);
document.write(matches);
</div> </div>

El regex [^ ~] + coincidirá con todos los caracteres excepto ~ y devolverá las coincidencias en una matriz. A continuación, puede extraer las coincidencias de ella.

0
agregado
agregado el autor Andrew Willems, fuente
¡Esto funcionó para mí! str.split (); no funcionaba en Firefox, pero esto funcionó tanto en Chrome como en Firefox.
agregado el autor Sandeep, fuente

bueno, la manera más fácil sería algo así como:

var address = theEncodedString.split(/~/)
var name = address[0], street = address[1]
0
agregado

De acuerdo con ECMAScript6 ES6 , la forma limpia es la destrucción de matrices:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="true"> <div class="snippet-code">

const input = 'john smith~123 Street~Apt 4~New York~NY~12345';
const [name, street, unit, city, state, zip] = input.split('~');

console.log(name);//john smith
console.log(street);//123 Street
console.log(unit);//Apt 4
console.log(city);//New York
console.log(state);//NY
console.log(zip);//12345
</div> </div>

Puede tener elementos adicionales en la cadena de entrada. En este caso, puede usar el operador de descanso para obtener una matriz para el resto o simplemente ignorarlos:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="true"> <div class="snippet-code">

const input = 'john smith~123 Street~Apt 4~New York~NY~12345';
const [name, street, ...others] = input.split('~');

console.log(name);//john smith
console.log(street);//123 Street
console.log(others);//["Apt 4", "New York", "NY", "12345"]
</div> </div>

Supuse una referencia de solo lectura para los valores y usé la declaración const .

¡Disfruta de ES6!

0
agregado
@Sallar Yep. ¡Gracias amigo!
agregado el autor hallaji, fuente
También puede omitir un elemento: const [name, unit, ... others] = ...
agregado el autor Sallar, fuente

Aunque esta no es la forma más simple, podrías hacer esto:

var addressString = "~john smith~123 Street~Apt 4~New York~NY~12345~",
    keys = "name address1 address2 city state zipcode".split(" "),
    address = {};

// clean up the string with the first replace
// "abuse" the second replace to map the keys to the matches
addressString.replace(/^~|~$/g).replace(/[^~]+/g, function(match){
    address[ keys.unshift() ] = match;
});

// address will contain the mapped result
address = {
    address1: "123 Street"
    address2: "Apt 4"
    city: "New York"
    name: "john smith"
    state: "NY"
    zipcode: "12345"
}

Actualización para ES2015, utilizando la desestructuración

const [address1, address2, city, name, state, zipcode] = addressString.match(/[^~]+/g);

// The variables defined above now contain the appropriate information:

console.log(address1, address2, city, name, state, zipcode);
// -> john smith 123 Street Apt 4 New York NY 12345
0
agregado
¿Podrías explicar cómo funciona esto?
agregado el autor Glycan, fuente
primero tenemos una cadena separada por signos '~' y una matriz de claves . La segunda función de reemplazo usa [^ ~] + para unir cada parte diferente (es decir, '123 Street', 'Apt 4', etc.) y llama a la función para cada parte, pasándola como argumento . En cada ejecución, la función toma la primera clave de la matriz de claves (también la elimina usando Array.unshift) y asigna la clave y la parte al objeto de la dirección.
agregado el autor ewino, fuente

No necesitas jQuery.

var s = 'john smith~123 Street~Apt 4~New York~NY~12345';
var fields = s.split(/~/);
var name = fields[0];
var street = fields[1];
0
agregado
¡Gracias por señalar que split acepta una expresión regular!
agregado el autor phunehehe, fuente
No necesita agregar expresiones regulares a este simple reemplazo. Solo lo hará más lento si algo. Puede cambiarlo a comillas para reemplazar una cadena simple.
agregado el autor Anish Gupta, fuente

Con String.prototype.split de JavaScript función:

var input = 'john smith~123 Street~Apt 4~New York~NY~12345';

var fields = input.split('~');

var name = fields[0];
var street = fields[1];
// etc.
0
agregado
@ImaginedDesign Estás equivocado. JavaScript le permite usar comillas simples y comillas dobles indistintamente. La única diferencia es qué cita debe ser escapada dentro de ellos - \ ' o \ ". El patrón que viste en las respuestas de las personas fue solo una coincidencia, el tipo de cita que el uso es preferencia personal
agregado el autor Rory O'Kane, fuente
Parece que JavaScript requiere que la división use comillas simples y jQuery requiere el uso de comillas dobles. Espero que esto ayude a otros.
agregado el autor ImaginedDesign, fuente
Es completamente absurdo nombrar una matriz "dividida". Parece que el nombre de la matriz es una función. Muy confuso para cualquiera con conocimiento limitado.
agregado el autor gravityboy, fuente

Algo como:

var divided = str.split("/~/");
var name=divided[0];
var street = divided[1];

Probablemente va a ser más fácil

0
agregado
No, quiere división de código ("~") o (/ ~ /) pero no split ("/ ~ /") . Este último solo dividiría "John/~/Smith" y no "John ~ Smith" .
agregado el autor Andrew Willems, fuente

Zach had this one right.. using his method you could also make a seemingly "multi-dimensional" array.. I created a quick example at JSFiddle http://jsfiddle.net/LcnvJ/2/

// array[0][0] will produce brian
// array[0][1] will produce james

// array[1][0] will produce kevin
// array[1][1] will produce haley

var array = [];
    array[0] = "brian,james,doug".split(",");
    array[1] = "kevin,haley,steph".split(",");
0
agregado

Use este código ------

function myFunction() {
var str = "How are you doing today?";
var res = str.split("/");

}
0
agregado