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...
ctrlShiftBryan
sumber

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.
Zach
sumber
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];
Grant Wagner
sumber
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!

Vahid Hallaji
sumber
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
Torsten Walter
sumber
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
13

Anda ingin melihat substr atau split JavaScript , karena ini sebenarnya bukan tugas yang cocok untuk jQuery.

John Sheehan
sumber
5

baik, cara termudah akan menjadi sesuatu seperti:

var address = theEncodedString.split(/~/)
var name = address[0], street = address[1]
Dan
sumber
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];
        }
    }
}
BJ Patel
sumber
4

Sesuatu seperti:

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

Mungkin akan menjadi yang paling mudah

Steve g
sumber
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.

Tushar
sumber
1
Ini berhasil untuk saya! str.split();tidak berfungsi di Firefox, tetapi ini berfungsi baik di Chrome dan Firefox.
Sandeep
1
@ Tetap, tidak, str.split(); berfungsi di Firefox dan semua peramban utama .
Andrew Willems
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(",");
Billy Hallman
sumber
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/

Pengembang
sumber
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"
Leandrotk
sumber
1

Coba di Javascript Biasa

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

 var ar= [url,statu] = window.location.href.split("=");
Hari Lakkakula
sumber
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(',')
Chris Bartholomew
sumber
-1

Gunakan kode ini -

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

}
Bal mukund kumar
sumber