2012-06-04 42 views
8

Tôi có chuỗi văn bản có thể là bất kỳ số ký tự nào mà tôi muốn đính kèm số đơn đặt hàng vào cuối. Sau đó, tôi có thể nhổ ra số thứ tự khi tôi cần phải sử dụng nó một lần nữa. Kể từ khi có một khả năng rằng số là chiều dài thay đổi, tôi muốn làm một biểu thức chính quy mà tất cả mọi thứ bắt sau khi các = dấu trong chuỗi ?order_num=regex - nhận số sau chuỗi ký tự nhất định

Vì vậy, toàn bộ chuỗi sẽ

"aijfoi aodsifj adofija afdoiajd?order_num=3216545" 

Tôi đã đã cố gắng sử dụng trình tạo biểu thức chính quy trực tuyến nhưng không có may mắn. Ai đó có thể vui lòng giúp tôi với trích xuất số cuối cùng và đặt chúng vào một biến và một cái gì đó để đặt những gì đến trước các ?order_num=203823 vào biến riêng của nó.

Tôi sẽ đăng một số nỗ lực của riêng mình, nhưng tôi thấy trước sự thất bại và nhầm lẫn.

Trả lời

18
var s = "aijfoi aodsifj adofija afdoiajd?order_num=3216545"; 

var m = s.match(/([^\?]*)\?order_num=(\d*)/); 
var num = m[2], rest = m[1]; 

Nhưng hãy nhớ rằng cụm từ thông dụng là chậm. Sử dụng indexOfsubstring/slice khi bạn có thể. Ví dụ:

var p = s.indexOf("?"); 
var num = s.substring(p + "?order_num=".length), rest = s.substring(0, p); 
+1

hm. không biết rằng! Tôi luôn luôn giả định rằng vì họ vô cùng khó khăn, họ đã trở thành tốt. Tôi nghĩ tôi sẽ sử dụng nó nếu nó thực sự nhanh hơn. Cảm ơn! – 1252748

+0

'([^ \?] *) \? Order_num = (\ d *)' phải là '([^ #?] *) \? Order_num = (\ d *)'. Tốt hơn: '([^ #?] *) [? &] Order_num = (\ d *)'. Thậm chí sau đó, điều đó không xử lý ký tự thoát trong order_num hoặc số. Tại sao JS không có trình phân tích cú pháp URL dựng sẵn? – ikegami

+0

@thomas Vâng regexps * là tốt vì chúng có thể cho phép bạn làm theo một dòng những gì bạn thường làm trong nhiều dòng mã. Quá mạnh, nó cũng có nghĩa là chậm hơn. Không phải đề cập đến cách khó khăn hơn để duy trì ... bạn sẽ kết thúc viết lại regexps của riêng bạn thay vì sửa chữa chúng. – MaxArt

9

tôi thấy không cần regex cho việc này:

var str="aijfoi aodsifj adofija afdoiajd?order_num=3216545"; 
var n=str.split("?"); 

n sau đó sẽ là một mảng, nơi chỉ số 0 là trước? và chỉ số 1 là sau.

Một ví dụ khác:

var str="aijfoi aodsifj adofija afdoiajd?order_num=3216545"; 
var n=str.split("?order_num="); 

sẽ cung cấp cho bạn kết quả: n[0] = aijfoi aodsifj adofija afdoiajdn[1] = 3216545

+1

Lưu ý rằng anh ta muốn lấy một phần sau '=' ... nhưng ngược lại, yep. –

+2

+1 Sau đó chia nhỏ '&' và sau đó trên '=' và bạn thậm chí có thể xử lý 'afdoiajd? Iminyourstring = 21312 & order_num = 3216545 & throwingyouoff = 231221' – Paulpro

+0

@DavidThomas Cảm ơn, tôi đã thêm một ví dụ cho điều đó. –

2

Bạn có thể substring từ trường hợp đầu tiên của ? trở đi, và sau đó regex để thoát khỏi của hầu hết các phức tạp trong biểu thức, và cải thiện hiệu suất (mà có lẽ là không đáng kể anyway và không phải cái gì phải lo lắng về trừ khi bạn đang làm điều này qua hàng ngàn lần lặp). ngoài ra, điều này sẽ khớp với order_num= tại bất kỳ điểm nào trong chuỗi truy vấn, không nhất thiết chỉ ở cuối chuỗi truy vấn.

var match = s.substr(s.indexOf('?')).match(/order_num=(\d+)/); 
if (match) { 
    alert(match[1]); 
} 
+0

+1 Vì câu trả lời của bạn đang xem xét khả năng các chữ số có thể không nằm ở cuối chuỗi. Cảm ơn! –

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