Nhận mọi thứ sau dấu gạch ngang trong một chuỗi trong javascript


150

Điều gì sẽ là cách sạch nhất để làm điều này sẽ hoạt động trong cả IE và firefox.

Chuỗi của tôi trông như thế này: đôi khi-20202

Bây giờ 'đôi khi' và số nguyên sau dấu gạch ngang có thể có độ dài khác nhau.

Tôi chỉ nên sử dụng chuỗi con và chỉ mục của hoặc là những cách khác?

Câu trả lời:


280

Làm thế nào tôi sẽ làm điều này:

// function you can use:
function getSecondPart(str) {
    return str.split('-')[1];
}
// use the function:
alert(getSecondPart("sometext-20202"));

62
Không có gì đáng nói khi chức năng này sẽ không hoạt động nếu chuỗi là sometext-20202-303?
Istiaque Ahmed

17
@IstiaqueAhmed sẽ là nếu câu hỏi không cụ thể về một định dạng rất cụ thể: "Chuỗi của tôi trông như thế này: đôi khi-20202"
artlung

7
Câu hỏi đã có get everything after the dash in a string in javascript, trong trường hợp này, sẽ thất bại.
Artem Kalinchuk

108

Một giải pháp tôi thích sẽ là:

const str = 'sometext-20202';
const slug = str.split('-').pop();

Trong trường hợp slugsẽ là kết quả của bạn


1
Giải pháp này là tốt nhất nếu bạn đang làm việc với nhiều dấu phân cách.
Ethan Keiley

26
var the_string = "sometext-20202";
var parts = the_string.split('-', 2);

// After calling split(), 'parts' is an array with two elements:
// parts[0] is 'sometext'
// parts[1] is '20202'

var the_text = parts[0];
var the_num  = parts[1];

24
var testStr = "sometext-20202"
var splitStr = testStr.substring(testStr.indexOf('-') + 1);

6

AFAIK, cả hai substring()indexOf()được hỗ trợ bởi cả Mozilla và IE. Tuy nhiên, lưu ý rằng chất nền () có thể không được hỗ trợ trên các phiên bản trước của một số trình duyệt (đặc biệt là Netscape / Opera).

Bài đăng của bạn chỉ ra rằng bạn đã biết cách thực hiện bằng cách sử dụng substring()indexOf()vì vậy tôi không đăng mẫu mã.


Đây thực sự là một giải pháp tốt hơn so với chia nhỏ, tùy thuộc vào ứng dụng của bạn, bởi vì nếu bạn có nhiều hơn một - bạn có thể nhận hậu quả không mong muốn.
trevorgrayson

20
chuỗi.sub chuỗi (string.indexOf ('-') + 1)
trevorgrayson

indexOf không tồn tại trong IE8 trở xuống, mặc dù polyfill tồn tại.
Erik Honn

3

Bạn có thể làm điều đó với RegExp tích hợp (mẫu [, cờ]) Ký hiệu xuất xưởng trong js như thế này:

RegExp(/-(.*)/).exec("sometext-20202")[1]

trong hàm thực thi mã ở trên sẽ trả về một mảng có hai phần tử (["-20202", "20202"]) một phần có dấu gạch nối (-20202) và một phần không có dấu gạch nối (20202), bạn nên chọn phần tử thứ hai (chỉ mục 1)



0

Sử dụng biểu thức chính quy của biểu mẫu: \ w- \ d + trong đó a \ w đại diện cho một từ và \ d đại diện cho một chữ số. Họ sẽ không làm việc ra khỏi hộp, vì vậy hãy chơi xung quanh. Hãy thử điều này .

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.