2010-02-24 34 views
5

Xin hãy giúp tôi giải quyết tình huống kỳ lạ này:Tìm và lấy chỉ số trong chuỗi

Đây là mã:

Liên kết là như vậy - www.blablabla.ru#3

Các regex là vậy:

var id = window.location.href.replace(/\D/, ''); 
alert(id); 

Cụm từ thông dụng là chính xác - biểu thức phải chỉ hiển thị số ... nhưng không hiển thị số :-(

Bạn có thể vui lòng tư vấn cho tôi và cung cấp một số thông tin về cách chỉ nhận được số trong chuỗi không?

Cảm ơn

Trả lời

1

Sử dụng cờ /\D/g, toàn cầu thay thế tất cả các trường hợp

var id = window.location.href.replace(/\D/g, ''); 
alert(id); 

/\D+/ được hiệu suất tốt hơn so với /\D/g, theo Justin Johnson, mà tôi nghĩ vì \D+ thể phù hợp và thay thế nó Trong một lần bắn.

+0

'/ \ D +/g' nhanh hơn'/\ D/g' Xem phản ứng của tôi để trả lời Ivan của –

+0

Cảm ơn các benchmark, tôi nghĩ rằng nó vì khoảng 30% \ D + có thể khớp trong một shot – YOU

+0

Bạn cai trị, cảm ơn !! –

12

Bạn chỉ đang thay thế ký tự đầu tiên không có chữ số bằng chuỗi rỗng. Thử sử dụng:

var id = window.location.href.replace(/\D+/g, ''); alert(id); 

(Lưu ý cờ "toàn cầu" ở cuối regex).

+0

Bạn cai trị con người, cảm ơn! –

+2

Các thử nghiệm của tôi cho thấy hiệu suất sử dụng '/ \ D +/g' cao hơn khoảng 30% thay vì chỉ'/\ D/g'. var r1 =/\ D/g, r2 =/\ D +/g, s = "", MAX = 1020, i = MAX; làm {s + = (i% 2)? "aaaaaaaaaaa": "11111111111"; } trong khi tôi); console.time ("\\ D"); cho (var i = 0; i

3

Chỉnh sửa: Xem Kobi's answer. Nếu bạn thực sự đang sử dụng phần băm của sự vật, chỉ cần sử dụng location.hash! (Để tự: Doh!)

Nhưng tôi sẽ để bên dưới trong trường hợp bạn đang làm điều gì đó phức tạp hơn ví dụ của bạn.

Câu trả lời gốc:

Như những người khác đã nói, bạn đã bỏ lá cờ toàn cầu thay thế. Nhưng tôi lo lắng về biểu hiện, nó thực sự mong manh. Hãy xem xét: www.37signals.com#42: Chuỗi số kết quả của bạn sẽ là 3742, có thể không phải là thứ bạn muốn. Những ví dụ khác: www.blablabla.ru/user/4#3 (43), www2.blablabla.ru#3 (23), ...

Làm thế nào 'bout:

id = window.location.href.match(/\#(\d+)/)[1]; 

... mà được bạn tập tiếp giáp của các chữ số ngay sau dấu băm (hoặc không xác định nếu không có).

+2

Có vị trí.hash. :) –

+2

@Georg: LOL !! Tất nhiên là có, và đó là câu trả lời tốt hơn (có vẻ như Kobi đã đăng nó ngay bây giờ). Tôi sẽ để lại (chỉnh sửa) trong trường hợp anh ta không thực sự sử dụng băm nhưng đó chỉ là ví dụ của anh ta. –

6

Cân nhắc sử dụng location.hash - thao tác này chỉ giữ thẻ bắt đầu bằng # ở cuối url: "#42".
Bạn có thể viết:

var id = location.hash.substring(1); 
+0

Bạn cai trị con người, cảm ơn! –

Các vấn đề liên quan