Bagaimana cara memisahkan string, mematahkan karakter tertentu?


533

Saya punya string ini

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

Menggunakan JavaScript, apa cara tercepat untuk menguraikannya

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

Jawaban:


846

Dengan String.prototype.splitfungsi 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.

51

Anda tidak perlu 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];

53
Anda tidak perlu menambahkan regex ke penggantian sederhana ini. Itu hanya akan membuatnya lebih lambat jika ada. Anda dapat mengubahnya menjadi tanda kutip untuk penggantian string sederhana.
Anish Gupta

47

Menurut ECMAScript6 ES6, cara bersih adalah merusak susunan array:

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

Anda mungkin memiliki item tambahan dalam string input. Dalam hal ini, Anda bisa menggunakan operator sisanya untuk mendapatkan array untuk sisanya atau mengabaikannya:

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

Saya menduga referensi hanya baca untuk nilai dan menggunakan constdeklarasi.

Nikmati ES6!


6
Anda juga dapat melewatkan item:const [name, , unit, ...others] = ...
Sallar

16

Meskipun ini bukan cara paling sederhana, Anda bisa melakukan ini:

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

Pembaruan untuk ES2015, menggunakan penghancuran

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
pertama kita memiliki string yang dipisahkan oleh tanda '~' dan array keys. Fungsi ganti kedua digunakan [^~]+untuk mencocokkan setiap bagian yang berbeda (yaitu '123 Street', 'Apt 4', dll) dan memanggil fungsi untuk masing-masing bagian, meneruskannya sebagai argumen. Pada setiap menjalankan, fungsi mengambil kunci pertama dari array kunci (juga menghapusnya menggunakan Array.unshift) dan menetapkan kunci dan bagian ke objek alamat.
ewino


5

baik, cara termudah akan menjadi sesuatu seperti:

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

5

Jika Spliter ditemukan maka hanya

Membaginya

lain mengembalikan string yang sama

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

Sesuatu seperti:

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

Mungkin akan menjadi yang paling mudah


2
Tidak, Anda mau split("~")atau split(/~/)tidak split("/~/"). Yang terakhir hanya akan terpecah "John/~/Smith"dan tidak "John~Smith".
Andrew Willems

4

Anda dapat menggunakannya splituntuk membagi teks.

Sebagai alternatif, Anda juga bisa menggunakan matchsebagai berikut

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

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

Regex [^~]+akan mencocokkan semua karakter kecuali ~dan mengembalikan kecocokan dalam array. Anda kemudian dapat mengekstrak kecocokan dari itu.


1
Ini berhasil untuk saya! str.split();tidak berfungsi di Firefox, tetapi ini berfungsi baik di Chrome dan Firefox.
Sandeep


2

Zach memiliki hak ini .. menggunakan metodenya, Anda juga bisa membuat array yang tampaknya "multi-dimensi" .. Saya membuat contoh cepat di 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

JavaScript: Konversi String ke 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

Ini string.split("~")[0];menyelesaikan sesuatu.

sumber: String.prototype.split ()


Pendekatan fungsional lain menggunakan kari dan komposisi fungsi.

Jadi, hal pertama adalah fungsi split. Kami ingin membuat ini "john smith~123 Street~Apt 4~New York~NY~12345"menjadi ini["john smith", "123 Street", "Apt 4", "New York", "NY", "12345"]

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

Jadi sekarang kita dapat menggunakan splitByTildefungsi khusus kami . Contoh:

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

Untuk mendapatkan elemen pertama kita bisa menggunakan list[0]operator. Mari kita membangun firstfungsi:

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

Algoritma ini adalah: dibagi dengan titik dua dan kemudian mendapatkan elemen pertama dari daftar yang diberikan. Jadi kita dapat menyusun fungsi-fungsi itu untuk membangun getNamefungsi akhir kita . Membangun composefungsi dengan reduce:

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

Dan sekarang menggunakannya untuk menulis splitByTildedan firstfungsi.

const getName = compose(first, splitByTilde);

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

1

Coba di Javascript Biasa

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

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

0

Karena pertanyaan pemisahan pada koma digandakan untuk pertanyaan ini, tambahkan ini di sini.

Jika Anda ingin membagi pada karakter dan juga menangani spasi tambahan yang mungkin mengikuti karakter itu, yang sering terjadi dengan koma, Anda dapat menggunakan replacekemudian split, seperti ini:

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

-1

Gunakan kode ini -

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

}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.