javascript - regular - patron test
¿Cómo divido una cadena, rompiendo un carácter en particular? (11)
Tengo esta cuerda
''john smith~123 Street~Apt 4~New York~NY~12345''
Usando JavaScript, ¿cuál es la forma más rápida de analizar esto?
var name = "john smith";
var street= "123 Street";
//etc...
Algo como:
var divided = str.split("/~/");
var name=divided[0];
var street = divided[1];
Probablemente va a ser más fácil
Aunque esta no es la forma más sencilla, puedes 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 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
Bueno, la forma más fácil sería algo como:
var address = theEncodedString.split(/~/)
var name = address[0], street = address[1]
Con la función String.prototype.split
de JavaScript:
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.
De acuerdo con ECMAScript6 ES6
, la forma limpia es destruir matrices:
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
Es posible que tenga 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:
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"]
Supuse una referencia de solo lectura para valores y usé la declaración const
.
Disfruta de ES6!
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];
Puedes usar split
para dividir el texto.
Como alternativa, también puede utilizar la match
como sigue
var str = ''john smith~123 Street~Apt 4~New York~NY~12345'';
matches = str.match(/[^~]+/g);
console.log(matches);
document.write(matches);
La expresión regular [^~]+
coincidirá con todos los caracteres excepto ~
y devolverá las coincidencias en una matriz. A continuación, puede extraer las coincidencias de él.
Si se encuentra Spliter entonces solo
Dividirlo
de lo contrario devuelve la misma cadena
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]; } } }
Usa este código ------
function myFunction() {
var str = "How are you doing today?";
var res = str.split("/");
}
Usted querrá ver el substr o la String.prototype.split JavaScript ya que esta no es realmente una tarea adecuada para jQuery
Zach tenía este derecho ... usando su método, también podría hacer una matriz aparentemente "multidimensional" ... Creé un ejemplo rápido en 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(",");