web-dev-qa-db-fra.com

Comment diviser une chaîne en cassant un caractère en particulier?

J'ai cette ficelle

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

En utilisant JavaScript, quel est le moyen le plus rapide d’analyser cela en

var name = "john smith";
var street= "123 Street";
//etc...
478
ctrlShiftBryan

Avec la fonction 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.
767
Zach

Vous n'avez pas besoin de 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];
48
Grant Wagner

Selon ECMAScript6 ES6, la méthode propre consiste à détruire les tableaux:

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

Vous pouvez avoir des éléments supplémentaires dans la chaîne d'entrée. Dans ce cas, vous pouvez utiliser l'opérateur rest pour obtenir un tableau pour le reste ou simplement les ignorer: 

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"]

J'ai supposé une référence en lecture seule pour les valeurs et utilisé la déclaration const.

Profitez de ES6!

28
Vahid Hallaji

Même si ce n’est pas la façon la plus simple, vous pouvez le faire:

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"
}

Mise à jour pour ES2015, utilisation de la déstructuration

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
16
Torsten Walter

Vous aurez envie de regarder dans JavaScript substring ou split car ce n'est pas vraiment une tâche adaptée à jQuery

12
John Sheehan

Si Spliter est trouvé alors seulement 

Sépare le 

sinon, retourne la chaîne same

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];
        }
    }
}
5
BJ Patel

eh bien, le moyen le plus simple serait quelque chose comme:

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

Quelque chose comme:

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

Va probablement être le plus facile

4
Steve g

Vous pouvez utiliser split pour scinder le texte.

Alternativement, vous pouvez également utiliser match comme suit

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

console.log(matches);
document.write(matches);

La regex [^~]+ correspondra à tous les caractères sauf ~ et renverra les correspondances dans un tableau. Vous pouvez ensuite en extraire les correspondances.

3
Tushar

Zach avait celui-là juste .. en utilisant sa méthode, vous pouvez également créer un tableau apparemment "multi-dimensionnel" .. J'ai créé un exemple rapide sur 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(",");
2
Billy Hallman

Comme la question de la division par des virgules est dupliquée par cette question, ajoutez-la ici.

Si vous souhaitez séparer un caractère et gérer également les espaces supplémentaires pouvant suivre ce caractère, ce qui arrive souvent avec des virgules, vous pouvez utiliser replace puis split, comme ceci:

var items = string.replace(/,\s+/, ",").split(',')
0
Chris Bartholomew

Essayez en clair Javascript

 //basic url=http://localhost:58227/ExternalApproval.html?Status=1

 var ar= [url,statu] = window.location.href.split("=");
0
Hari Lakkakula

Ce string.split("~")[0]; fait avancer les choses.

source: String.prototype.split ()


Une autre approche fonctionnelle utilisant le curry et la composition fonctionnelle.

Donc, la première chose serait la fonction split. Nous voulons faire de ce "john smith~123 Street~Apt 4~New York~NY~12345" dans ce ["john smith", "123 Street", "Apt 4", "New York", "NY", "12345"]

const split = (separator) => (text) => text.split(separator);
const splitByTilde = split('~');

Nous pouvons donc maintenant utiliser notre fonction spécialisée splitByTilde. Exemple:

splitByTilde("john smith~123 Street~Apt 4~New York~NY~12345") // ["john smith", "123 Street", "Apt 4", "New York", "NY", "12345"]

Pour obtenir le premier élément, nous pouvons utiliser l'opérateur list[0]. Construisons une fonction first:

const first = (list) => list[0];

L'algorithme est le suivant: scindé par les deux points, puis récupère le premier élément de la liste donnée. Nous pouvons donc composer ces fonctions pour construire notre dernière fonction getName. Construire une fonction compose avec reduce:

const compose = (...fns) => (value) => fns.reduceRight((acc, fn) => fn(acc), value);

Et maintenant, l’utiliser pour composer les fonctions splitByTilde et first.

const getName = compose(first, splitByTilde);

let string = 'john smith~123 Street~Apt 4~New York~NY~12345';
getName(string); // "john smith"
0
leandrotk

JavaScript: convertir une chaîne en tableau JavaScript divisé

    var str = "This-javascript-tutorial-string-split-method-examples-tutsmake."
 
    var result = str.split('-'); 
     
    console.log(result);
     
    document.getElementById("show").innerHTML = result; 
<html>
<head>
<title>How do you split a string, breaking at a particular character in javascript?</title>
</head>
<body>
 
<p id="show"></p> 
 
</body>
</html>

https://www.tutsmake.com/javascript-convert-string-to-array-javascript/

0
Developer

Utilisez ce code ------ 

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

}
0
Bal mukund kumar