Cách lấy chuỗi con trước một ký tự jQuery hoặc JavaScript được chỉ định


237

Tôi đang cố gắng trích xuất mọi thứ trước dấu phẩy ','. Làm cách nào để làm điều này trong JavaScript hoặc jQuery? Tôi đã thử điều này và không làm việc ..

1345 albany street, Bellevue WA 42344

Tôi chỉ muốn lấy địa chỉ đường phố.

var streetaddress= substr(addy, 0, index(addy, '.')); 

29
addy.split(',', 1)[0]
antak

Câu trả lời:


404
var streetaddress= addy.substr(0, addy.indexOf(',')); 

Mặc dù đó không phải là nơi tốt nhất cho thông tin dứt khoát về từng phương thức làm gì ( mạng của nhà phát triển mozilla tốt hơn cho điều đó) w3schools.com rất tốt để giới thiệu cho bạn cú pháp.


22
Điều này sẽ không hoạt động nếu chuỗi đang tìm kiếm không chứa một thể hiện của ký tự tìm kiếm. Nó sẽ trả về một chuỗi rỗng.
David G

1
substrkhông được đề xuất; nên sử dụng substringthay vì developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
mẹo


29

thử cái này:

streetaddress.substring(0, streetaddress.indexOf(','));

1
Tại sao không có tình yêu cho câu trả lời của tôi? Nếu câu trả lời này là stackoverflow.com/questions/3745515/ thì câu trả lời của tôi chính xác như câu trả lời được chấp nhận và hoạt động để bắt đầu các chỉ số khác 0.
Mikey G

8
Như David G đã chỉ ra ở trên, có thể vì nó không hoạt động nếu không có dấu phẩy. OP có thể đã ngụ ý rằng chuỗi sẽ luôn có dấu phẩy, nhưng trong nhiều trường hợp, dấu phân cách không được đảm bảo. Xem jsfiddle.net/13pkp1xn
Q Bangwhistle

22
//split string into an array and grab the first item

var streetaddress = addy.split(',')[0];

Ngoài ra, tôi khuyên bạn nên đặt tên biến của mình bằng vỏ lạc đà (streetAddress) để dễ đọc hơn.


Điều này tốt hơn phương thức sử dụng indexof, trong trường hợp không có ký tự dấu phẩy
eyal_katz

2
Bạn có thể lưu một số xử lý và dừng phân tách ở lần đầu tiên "," được tìm thấy bằng cách sử dụng những gì @antak đã đăng dưới dạng nhận xét trong stackoverflow.com/a/22386366/601386 : addy.split(',', 1)[0]. Xem developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/iêu .
cúm

Sử dụng giải cấu trúc mảng, bạn có thể thực hiện: const [streetAddress,] = addy.split(','); Điều này hữu ích cho các trường hợp khi bạn muốn có nhiều hơn một giá trị, chẳng hạn như: let [callerIdName, callerId] = callerIdString.split('<'); (định dạng người gọi ban đầu là định dạng MCMULLIN, PARKER <+ 1XXXXXXXXX>)
parker_codes

Không phải câu trả lời này chính xác giống như câu trả lời được đăng vào ngày 30 tháng 10 năm 2015 sao?
kojow7

15

Nếu bạn thích nó ngắn, chỉ cần sử dụng RegExp :

var streetAddress = /[^,]*/.exec(addy)[0];

4
+1, tôi nghĩ rằng đây là một phương pháp hợp lý, nhưng tôi đã lấy một gợi ý từ điều này và đã đi vớiaddy.split(',', 1)[0]
antak

3
Phương pháp này rất hay, ví dụ nếu bạn muốn phân tách trên khoảng trắng: / [^ \ s] * /.
Exec

12

gần giống như câu trả lời của David G nhưng không có chức năng ẩn danh, nếu bạn không cảm thấy muốn bao gồm một câu trả lời.

s = s.substr(0, s.indexOf(',') === -1 ? s.length : s.indexOf(','));

trong trường hợp này, chúng ta sử dụng thực tế là đối số thứ hai substrlà độ dài và chúng ta biết chuỗi con của chúng ta bắt đầu từ 0.

câu trả lời hàng đầu không phải là một giải pháp chung chung vì hành vi không mong muốn nếu chuỗi không chứa ký tự bạn đang tìm kiếm.

nếu bạn muốn hành vi đúng trong trường hợp chung, hãy sử dụng phương pháp này hoặc phương pháp của David G, chứ không phải câu trả lời hàng đầu

phương thức regex và split cũng sẽ hoạt động, nhưng có thể hơi chậm / quá mức cho vấn đề cụ thể này.


8

Bạn cũng có thể sử dụng shift().

var streetaddress = addy.split(',').shift();

Theo Tài liệu web MDN:

Các shift()phương pháp loại bỏ đầu tiên phần tử từ một mảng và trả về yếu tố đó đã bị gỡ. Phương pháp này thay đổi độ dài của mảng.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift


Lập chỉ mục với [0] hiệu quả hơn so với sử dụng .shift ()
MysteryPancake


4

Nếu bạn muốn trả về chuỗi gốc chưa được xử lý nếu nó không chứa ký tự tìm kiếm thì bạn có thể sử dụng hàm ẩn danh (bao đóng):

var streetaddress=(function(s){var i=s.indexOf(',');
   return i==-1 ? s : s.substr(0,i);})(addy);

Điều này có thể được thực hiện chung chung hơn:

var streetaddress=(function(s,c){var i=s.indexOf(c);
   return i==-1 ? s : s.substr(0,i);})(addy,',');


2

Bạn có thể sử dụng regex vì điều này sẽ cung cấp cho bạn chuỗi nếu nó phù hợp với yêu cầu. Mã này sẽ giống như:

const address = "1345 albany street, Bellevue WA 42344";
const regex = /[1-9][0-9]* [a-zA-Z]+ [a-zA-Z]+/;
const matchedResult = address.match(regex);

console.log(matchedResult[0]); // This will give you 1345 albany street.

Vì vậy, để phá vỡ mã. [1-9][0-9]*về cơ bản có nghĩa là số đầu tiên không thể là số 0 và phải là một số nằm giữa 1-9và số tiếp theo có thể là bất kỳ số nào 0-9và có thể xảy ra 0 hoặc nhiều lần vì đôi khi số đó chỉ là một chữ số và sau đó nó khớp với một khoảng trắng. [a-zA-Z]về cơ bản khớp tất cả các chữ in hoa với các chữ cái nhỏ và phải xảy ra một hoặc nhiều lần và điều này được lặp lại.


0

Bạn có thể sử dụng Azle để lấy các chuỗi con trước :

str = 'This is how we go to the place!'

az.get_everything_before(str, 'place')

Kết quả : Đây là cách chúng tôi đi đến

sau

str = 'This is how we go to the place!'

az.get_everything_after(str, 'go')

Kết quả : đến nơi!

và ở giữa :

str = 'This is how we go to the place!'

az.get_everything_between(str, 'how', 'place')

Kết quả : chúng tôi đi đến

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.