Cum împărțesc un șir de caractere, care sparge un anumit personaj?

Am acest șir

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

Folosind JavaScript, care este cel mai rapid mod de a analiza acest lucru

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

11 răspunsuri

Veți dori să consultați substr sau împărțit , deoarece acesta este nu este o sarcină potrivită pentru jQuery

0
adăugat

Dacă se găsește Spliter , atunci numai

Împărțiți-o

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
adăugat

Puteți utiliza split pentru a împărți textul.

Ca alternativă, puteți utiliza, de asemenea, match după cum urmează

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

Regex [^ ~] + se va potrivi cu toate caracterele cu excepția ~ și va returna meciurile într-un tablou. Apoi puteți extrage meciurile de pe ea.

0
adăugat
adăugat autor Andrew Willems, sursa
Acest lucru a lucrat pentru mine! str.split (); nu funcționa în Firefox, dar acest lucru a funcționat atât în ​​Chrome, cât și în Firefox.
adăugat autor Sandeep, sursa

bine, cea mai ușoară cale ar fi ceva de genul:

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

Conform codului ECMAScript6 ES6 , calea curată este distrugerea rețelelor:

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

Este posibil să aveți elemente suplimentare în șirul de introducere. În acest caz, puteți utiliza operatorul de odihnă pentru a obține o matrice pentru restul sau doar pentru a le ignora:

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

Am presupus o referință pentru valori numai pentru citire și am folosit declarația const .

Bucurați-vă de ES6!

0
adăugat
@ Salariu Yep. Multumesc!
adăugat autor hallaji, sursa
De asemenea, puteți sări peste un element: const [nume, unitate, ... altele] = ...
adăugat autor Sallar, sursa

Chiar dacă acest lucru nu este cel mai simplu mod, puteți face acest lucru:

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

Actualizați pentru ES2015, utilizând distrugerea

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
adăugat
Îți explici cum funcționează?
adăugat autor Glycan, sursa
mai întâi avem un șir separat de semnele "~" și o serie de chei . Cea de-a doua funcție de înlocuire folosește [^ ~] + pentru a se potrivi fiecărei părți diferite (de exemplu, 123 Street, Apt 4 etc) . La fiecare execuție, funcția primește prima cheie din matricea cheilor (de asemenea, scoate-o folosind Array.unshift) și atribuie cheia și piesa obiectului de adresă.
adăugat autor ewino, sursa

Nu aveți nevoie 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];
0
adăugat
Vă mulțumim că ați subliniat că split acceptă un regex!
adăugat autor phunehehe, sursa
Nu este nevoie să adăugați regex la această simplă înlocuire. Aceasta va face mai lentă decât orice. Puteți să-l modificați cu ghilimele pentru înlocuirea unui șir simplu.
adăugat autor Anish Gupta, sursa

Cu String.prototype.split :

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
adăugat
@ImaginedDesign Ați greșit. JavaScript vă permite să utilizați citate unice și citate dublu alternativ. Singura diferență este care citat trebuie să fie scos din ele - \ " sau \" . utilizarea este preferința personală.
adăugat autor Rory O'Kane, sursa
Se pare că JavaScript cere divizării să utilizeze citate simple și jQuery necesită utilizarea de ghilimele duble. Sper că acest lucru îi ajută pe alții.
adăugat autor ImaginedDesign, sursa
Este complet wacko pentru a numi o matrice "split". Se pare că numele matricei este o funcție. Foarte confuz pentru oricine are cunoștințe limitate.
adăugat autor gravityboy, sursa

Ceva asemănător cu:

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

Probabil va fi cea mai ușoară

0
adăugat
Nu, doriți ca split ("~") sau divizat (/ ~ /) să nu fie split ("/ ~ /") . Acesta din urmă ar împărți numai "John/~/Smith" și nu "John ~ Smith" .
adăugat autor Andrew Willems, sursa

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
adăugat

Utilizați acest cod ------

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

}
0
adăugat
JavaScript, România - Moldova
JavaScript, România - Moldova
328 participanți

Comunitatea Română JavaScript: github.com/js-ro Pentru confort, opriți notificările. Parteneri: @node_ro, @php_ro, @python_ro, @seo_ro, @RomaniaGroup, @ai_ro, @Grupuri_IT Offtop: @holywars_ro Joburi: @js_jobs_ro Sponsored with ❤️ by ciupacabra.com