Wie teile ich eine Zeichenfolge und unterbreche ein bestimmtes Zeichen?


533

Ich habe diese Saite

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

Mit JavaScript können Sie dies am schnellsten analysieren

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

Antworten:


846

Mit der JavaScript- String.prototype.splitFunktion:

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.

51

Sie brauchen jQuery nicht.

var s = 'john smith~123 Street~Apt 4~New York~NY~12345';
var fields = s.split(/~/);
var name = fields[0];
var street = fields[1];

53
Sie müssen diesem einfachen Ersetzen keinen regulären Ausdruck hinzufügen. Es wird es nur langsamer machen, wenn überhaupt. Sie können es in Anführungszeichen ändern, um eine einfache Zeichenfolge zu ersetzen.
Anish Gupta

47

Laut ECMAScript6 ES6besteht der saubere Weg darin, Arrays zu zerstören:

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

Möglicherweise enthält die Eingabezeichenfolge zusätzliche Elemente. In diesem Fall können Sie den Rest-Operator verwenden, um ein Array für den Rest abzurufen oder sie einfach zu ignorieren:

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

Ich nahm eine schreibgeschützte Referenz für Werte an und verwendete die constDeklaration.

Viel Spaß mit ES6!


6
Sie können auch einen Artikel überspringen:const [name, , unit, ...others] = ...
Sallar

16

Auch wenn dies nicht der einfachste Weg ist, können Sie dies tun:

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

Update für ES2015 mit Destrukturierung

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

4
Zuerst haben wir eine Zeichenfolge, die durch '~' Zeichen und eine Reihe von Zeichen getrennt ist keys. Die zweite Ersetzungsfunktion verwendet [^~]+, um jedes unterschiedliche Teil (z. B. '123 Street', 'Apt 4' usw.) abzugleichen und ruft die Funktion für jedes Teil auf und übergibt sie als Argument. Bei jedem Lauf nimmt die Funktion den ersten Schlüssel aus dem Schlüsselarray (entfernt ihn auch mit Array.unshift) und weist den Schlüssel und das Teil dem Adressobjekt zu.
Ewino


5

Nun, der einfachste Weg wäre so etwas wie:

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

5

Wenn Spliter gefunden wird, dann nur

Teile es auf

Andernfalls wird dieselbe Zeichenfolge zurückgegeben

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];
        }
    }
}

4

Etwas wie:

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

Wird wahrscheinlich am einfachsten sein


2
Nein, du willst entweder split("~")oder split(/~/)aber nicht split("/~/"). Letzteres würde sich nur spalten "John/~/Smith"und nicht "John~Smith".
Andrew Willems

4

Sie können splitden Text teilen.

Alternativ können Sie auch matchFolgendes verwenden

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

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

Der reguläre Ausdruck stimmt [^~]+mit allen Zeichen außer überein ~und gibt die Übereinstimmungen in einem Array zurück. Sie können dann die Übereinstimmungen daraus extrahieren.


1
Das hat bei mir funktioniert! str.split();funktionierte nicht in Firefox, aber dies funktionierte sowohl in Chrome als auch in Firefox.
Sandeep

1
@ Sandep, nein, str.split(); funktioniert in Firefox und allen gängigen Browsern .
Andrew Willems

2

Zach hatte dieses Recht. Mit seiner Methode konnte man auch ein scheinbar "mehrdimensionales" Array erstellen. Ich habe ein kurzes Beispiel bei JSFiddle erstellt: 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

JavaScript: Konvertiert String in Array 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/


1

Dies string.split("~")[0];erledigt die Dinge.

Quelle: String.prototype.split ()


Ein weiterer funktionaler Ansatz unter Verwendung von Curry und Funktionszusammensetzung.

Das erste wäre also die Split-Funktion. Das wollen wir machen "john smith~123 Street~Apt 4~New York~NY~12345"in dieser["john smith", "123 Street", "Apt 4", "New York", "NY", "12345"]

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

Jetzt können wir unsere spezielle splitByTildeFunktion nutzen. Beispiel:

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

Um das erste Element zu erhalten, können wir den list[0]Operator verwenden. Lassen Sie uns eine firstFunktion erstellen :

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

Der Algorithmus lautet: durch den Doppelpunkt geteilt und dann das erste Element der angegebenen Liste erhalten. Wir können diese Funktionen also zusammenstellen, um unsere endgültige getNameFunktion zu erstellen . Aufbau einer composeFunktion mit reduce:

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

Und jetzt damit komponieren splitByTildeund firstfunktionieren.

const getName = compose(first, splitByTilde);

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

1

Versuchen Sie es in Plain Javascript

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

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

0

Da die Frage der Aufteilung in Kommas auf diese Frage dupliziert wird, fügen Sie diese hier hinzu.

Wenn Sie auf ein Zeichen geteilt werden soll und auch zusätzliche Leerzeichen behandeln , die dieses Zeichen folgen könnte, die oft mit Komma geschieht, können Sie replacedann split, wie folgt aus :

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

-1

Verwenden Sie diesen Code -

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

}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.