Làm thế nào để tôi chia một chuỗi, phá vỡ một ký tự cụ thể?


533

Tôi có chuỗi này

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

Sử dụng JavaScript, cách nhanh nhất để phân tích điều này thành

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

Câu trả lời:


846

Với String.prototype.splitchức năng của 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

Bạn không cần 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
Bạn không cần thêm regex vào thay thế đơn giản này. Nó sẽ chỉ làm cho nó chậm hơn nếu bất cứ điều gì. Bạn có thể thay đổi nó thành dấu ngoặc kép để thay thế chuỗi đơn giản.
Anish Gupta

47

Theo ECMAScript6 ES6, cách sạch sẽ là phá hủy các mảng:

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

Bạn có thể có thêm các mục trong chuỗi đầu vào. Trong trường hợp này, bạn có thể sử dụng toán tử nghỉ để lấy một mảng cho phần còn lại hoặc chỉ cần bỏ qua chúng:

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

Tôi giả sử một tài liệu tham khảo chỉ đọc cho các giá trị và sử dụng constkhai báo.

Thưởng thức ES6!


6
Bạn cũng có thể bỏ qua một mục:const [name, , unit, ...others] = ...
Sallar

16

Mặc dù đây không phải là cách đơn giản nhất, bạn có thể làm điều này:

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

Cập nhật cho ES2015, sử dụng hủy

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
đầu tiên chúng ta có một chuỗi được phân tách bằng các dấu '~' và một mảng keys. Hàm thay thế thứ hai đang sử dụng [^~]+để khớp với từng phần khác nhau (ví dụ 'Phố 123', 'Apt 4', v.v.) và gọi hàm cho từng phần, chuyển nó làm đối số. Mỗi lần chạy, hàm sẽ lấy khóa đầu tiên từ mảng khóa (cũng loại bỏ nó bằng Array.unshift) và gán khóa và phần cho đối tượng địa chỉ.
ewino

13

Bạn sẽ muốn xem xét JavaScript của substr hoặc chia , vì đây là không thực sự là một nhiệm vụ phù hợp với jQuery.


5

tốt, cách dễ nhất sẽ là một cái gì đó như:

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

5

Nếu Spliter được tìm thấy thì chỉ

Tách nó

khác trả về cùng một chuỗi

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

Cái gì đó như:

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

Có lẽ sẽ dễ dàng nhất


2
Không, bạn muốn split("~")hoặc split(/~/)không split("/~/"). Sau này sẽ chỉ phân chia "John/~/Smith"và không "John~Smith".
Andrew Willems

4

Bạn có thể sử dụng splitđể phân chia văn bản.

Thay thế, bạn cũng có thể sử dụng matchnhư sau

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

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

Regex [^~]+sẽ khớp tất cả các ký tự ngoại trừ ~và trả về các kết quả khớp trong một mảng. Sau đó bạn có thể trích xuất các trận đấu từ nó.


1
Điều này làm việc cho tôi! str.split();đã không hoạt động trong Firefox, nhưng điều này hoạt động cả trong Chrome và Firefox.
Sandeep


2

Zach có quyền này .. sử dụng phương thức của mình, bạn cũng có thể tạo một mảng dường như "đa chiều" .. Tôi đã tạo một ví dụ nhanh tại 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: Chuyển đổi chuỗi thành mảng tách JavaScript

    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-opes-to-array-javascript/


1

Điều này string.split("~")[0];được thực hiện.

nguồn: String.prototype.split ()


Một cách tiếp cận chức năng khác sử dụng cà ri và thành phần chức năng.

Vì vậy, điều đầu tiên sẽ là chức năng phân chia. Chúng tôi muốn làm điều này "john smith~123 Street~Apt 4~New York~NY~12345"thành["john smith", "123 Street", "Apt 4", "New York", "NY", "12345"]

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

Vì vậy, bây giờ chúng ta có thể sử dụng splitByTildechức năng chuyên ngành của chúng tôi . Thí dụ:

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

Để có được phần tử đầu tiên, chúng ta có thể sử dụng list[0]toán tử. Hãy xây dựng một firstchức năng:

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

Thuật toán là: chia cho dấu hai chấm và sau đó lấy phần tử đầu tiên của danh sách đã cho. Vì vậy, chúng ta có thể soạn các hàm đó để xây dựng getNamehàm cuối cùng . Xây dựng composechức năng với reduce:

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

Và bây giờ sử dụng nó để soạn thảo splitByTildevà các firstchức năng.

const getName = compose(first, splitByTilde);

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

1

Thử trong Javascript đơn giản

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

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

0

Vì câu hỏi chia tách dấu phẩy được nhân đôi cho câu hỏi này, nên thêm câu hỏi này vào đây.

Nếu bạn muốn phân tách một ký tự và cũng xử lý các khoảng trắng bổ sung có thể theo ký tự đó, điều thường xảy ra với dấu phẩy, bạn có thể sử dụng replacesau đó split, như sau:

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

-1

Sử dụng mã này -

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

}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.