2010-12-31 27 views
24

Tôi đã tự hỏi làm thế nào để sử dụng một regexp để phù hợp với một cụm từ mà đến sau một trận đấu nhất định. Giống như:Javascript Regexp - Đối sánh các ký tự sau một cụm từ nhất định

var phrase = "yesthisismyphrase=thisiswhatIwantmatched"; 
var match = /phrase=.*/; 

Điều đó sẽ phù hợp với từ phrase= đến cuối của chuỗi, nhưng là nó có thể để có được tất cả mọi thứ sau khi phrase= mà không cần phải sửa đổi một chuỗi?

Trả lời

39

Bạn sử dụng capture groups (được biểu thị bằng dấu ngoặc đơn).

Khi bạn thực thi regex thông qua hàm trùng khớp hoặc hàm exec, trả về một mảng bao gồm các phần tử được bắt bởi các nhóm chụp. Sau đó, bạn có thể truy cập những gì đã bị bắt qua mảng đó. Ví dụ:

var phrase = "yesthisismyphrase=thisiswhatIwantmatched"; 
var myRegexp = /phrase=(.*)/; 
var match = myRegexp.exec(phrase); 
alert(match[1]); 

hoặc

var arr = phrase.match(/phrase=(.*)/); 
if (arr != null) { // Did it match? 
    alert(arr[1]); 
} 
+1

không có cách nào để tránh sử dụng 'match [1]' đó? – Vandervals

8
phrase.match(/phrase=(.*)/)[1] 

lợi nhuận

"thisiswhatIwantmatched" 

Các dấu ngoặc chỉ định một nhóm chụp cái gọi là. Nội dung của các nhóm chụp được đưa vào mảng kết quả, bắt đầu từ 1 (0 là toàn bộ kết quả).

+4

Điều quan trọng là nhận ra '.match' trả về' rỗng 'nếu trận đấu không thành công, vì vậy hãy kiểm tra điều đó trước khi cố gắng lấy chỉ mục đầu tiên là một ý tưởng hay. Ngoài ra, nếu bạn có nhiều hơn một pha trong chuỗi khóa = giá trị đó, bạn có thể thay đổi regex thành '/ phrase = (. *?) (; | $) /' Ở đó; là dấu phân tách. Hơn nữa, bạn có thể tóm tắt điều này với một phương pháp bằng cách sử dụng constructor RegEx ... – Hemlock

0

Hãy thử điều này, tôi hy vọng nó hoạt động

var p = /\b([\w|\W]+)\1+(\=)([\w|\W]+)\1+\b/; 
 
console.log(p.test('case1 or AA=AA ilkjoi')); 
 
console.log(p.test('case2 or AA=AB')); 
 
console.log(p.test('case3 or 12=14'));

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