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

533

J'ai cette chaîne

'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...
ctrlShiftBryan
la source

Réponses:

846

Avec la String.prototype.splitfonction 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.
Zach
la source
51

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];
Grant Wagner
la source
53
Vous n'avez pas besoin d'ajouter l'expression régulière à ce simple remplacement. Cela ne fera que le ralentir, le cas échéant. Vous pouvez le remplacer par des guillemets pour un simple remplacement de chaîne.
Anish Gupta
47

Selon ECMAScript6 ES6, la voie propre consiste à déstructurer 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 de repos 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 j'ai utilisé la constdéclaration.

Profitez d'ES6!

Vahid Hallaji
la source
6
Vous pouvez également ignorer un élément:const [name, , unit, ...others] = ...
Sallar
16

Même si ce n'est pas le moyen le 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, utilisant 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
Torsten Walter
la source
4
nous avons d'abord une chaîne séparée par des signes «~» et un tableau de keys. La deuxième fonction de remplacement utilise [^~]+pour faire correspondre chaque partie différente (c'est-à-dire «123 Street», «Apt 4», etc.) et appelle la fonction pour chaque partie, en la passant comme argument. À chaque exécution, la fonction prend la première clé du tableau de clés (en la supprimant également à l'aide de Array.unshift) et affecte la clé et la pièce à l'objet d'adresse.
ewino
13

Vous voudrez examiner le substrat ou le fractionnement de JavaScript , car ce n'est pas vraiment une tâche adaptée à jQuery.

John Sheehan
la source
5

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

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

Si Spliter est trouvé, alors seulement

Sépare le

sinon retourne la même chaîne

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];
        }
    }
}
BJ Patel
la source
4

Quelque chose comme:

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

Va probablement être plus facile

Steve g
la source
2
Non, vous voulez split("~")ou split(/~/)non split("/~/"). Ce dernier ne ferait que se diviser "John/~/Smith"et non "John~Smith".
Andrew Willems
4

Vous pouvez utiliser splitpour diviser le texte.

Comme alternative, vous pouvez également utiliser matchcomme suit

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

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

L'expression régulière [^~]+correspondra à tous les caractères sauf ~et renverra les correspondances dans un tableau. Vous pouvez ensuite en extraire les correspondances.

Tushar
la source
1
Cela a fonctionné pour moi! str.split();ne fonctionnait pas dans Firefox, mais cela fonctionnait à la fois dans Chrome et Firefox.
Sandeep
1
@Sandeep, non, str.split(); fonctionne dans Firefox et tous les principaux navigateurs .
Andrew Willems
2

Zach avait ce droit .. en utilisant sa méthode, vous pouvez également créer un tableau apparemment "multidimensionnel" .. 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(",");
Billy Hallman
la source
2

JavaScript: Convertir la chaîne en tableau JavaScript Split

    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/

Développeur
la source
1

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

source: String.prototype.split ()


Une autre approche fonctionnelle utilisant la composition de curry et de fonction.

La première chose serait donc la fonction split. Nous voulons faire cela "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('~');

Alors maintenant, nous pouvons utiliser notre splitByTildefonction spécialisée . 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' list[0]opérateur. Construisons une firstfonction:

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

L'algorithme est: divisé 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 getNamefonction finale . Construire une composefonction avec reduce:

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

Et maintenant l'utiliser pour composer splitByTildeet firstfonctionner.

const getName = compose(first, splitByTilde);

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

Essayez en Javascript simple

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

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

Étant donné que la question de fractionnement sur virgules est dupliquée sur cette question, ajoutez-la ici.

Si vous souhaitez diviser un caractère et gérer également des espaces supplémentaires qui pourraient suivre ce caractère, ce qui arrive souvent avec des virgules, vous pouvez replacealors utiliser split, comme ceci:

var items = string.replace(/,\s+/, ",").split(',')
Chris Bartholomew
la source
-1

Utilisez ce code -

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

}
Bal mukund kumar
la source