2013-07-22 32 views
109

Tôi đang cố viết biểu thức chính quy trả về một chuỗi nằm giữa các dấu ngoặc đơn. Ví dụ: Tôi muốn để có được những chuỗi mà nằm giữa các dây "(" và ")"Cụm từ thông dụng để nhận chuỗi giữa các dấu ngoặc đơn trong Javascript

I expect five hundred dollars ($500). 

sẽ trở

$500 

Tìm thấy Regular Expression to get a string between two strings in Javascript

Nhưng tôi mới với regex . Tôi không biết cách sử dụng '(', ')' trong regexp

+0

thể trùng lặp của [Regular Expression để tìm một chuỗi bao gồm giữa hai nhân vật, trong khi loại trừ các delimiters] (http://stackoverflow.com/questions/1454913/regular-expression-to- find-a-string-included-between-two-characters-while-exclu) –

+0

bạn có thể sử dụng giải pháp go-oleg bên dưới, hơi sửa đổi để kiểm tra ký hiệu đô la: 'var regExp =/\ (\ $ ([^) ] +) \) /; ' –

Trả lời

303

Bạn cần phải tạo một bộ dấu ngoặc đơn (có \) (khớp với dấu ngoặc đơn) và một nhóm dấu ngoặc đơn thông thường tạo ảnh của bạn nhóm:

var regExp = /\(([^)]+)\)/; 
var matches = regExp.exec("I expect five hundred dollars ($500)."); 

//matches[1] contains the value between the parentheses 
console.log(matches[1]); 

Breakdown:

  • \(: phù hợp với một mở ngoặc
  • (: bắt đầu chụp nhóm
  • [^)]+: phù hợp với một hoặc nhiều ) các ký tự không
  • ): cuối nhóm chụp
  • \): trận đấu kết thúc ngoặc

Dưới đây là một lời giải thích trực quan trên RegExplained

+11

+1 Đẹp, làm việc như một say mê. Tôi muốn thêm bạn để thêm http://tinyurl.com/mog7lr3 này cho giải thích trực quan của bạn. – Praveen

+5

@ user1671639: Đã cập nhật. Cảm ơn các liên kết! –

+0

Điều gì sẽ xảy ra nếu tôi yêu cầu truy xuất giữa [something] – CodeGuru

3

Đối với chỉ số sau khi một đồng tiền sign: \(.+\s*\d+\s*\) nên hoạt động

Hoặc \(.+\) fo r bất cứ điều gì bên trong dấu ngoặc

+1

Điều này sẽ làm việc cho văn bản mẫu, tuy nhiên nếu một ')' xuất hiện sau trong chuỗi như 'Tôi mong đợi năm trăm đô la ($ 500). (nhưng tôi sẽ trả tiền). 'sự tham lam của' + 'sẽ chiếm nhiều hơn nữa. –

+0

@Denomales Vì vậy, làm thế nào bạn sẽ có nó nắm bắt cả hai trường hợp của những chuỗi. Lý tưởng nhất là tôi đang làm một cái gì đó tương tự nhưng tôi muốn có: '($ 500)' và '(nhưng tôi sẽ trả)' được so khớp nhưng trong hai phân tách phù hợp hơn là được coi là một mục phù hợp? Cảm ơn trước! –

23

Thử chuỗi thao tác:

var txt = "I expect five hundred dollars ($500). and new brackets ($600)"; 
var newTxt = txt.split('('); 
for (var i = 1; i < newTxt.length; i++) { 
    console.log(newTxt[i].split(')')[0]); 
} 

hoặc regex (mà là hơi slow compare to the above)

var txt = "I expect five hundred dollars ($500). and new brackets ($600)"; 
var regExp = /\(([^)]+)\)/g; 
var matches = txt.match(regExp); 
for (var i = 0; i < matches.length; i++) { 
    var str = matches[i]; 
    console.log(str.substring(1, str.length - 1)); 
} 
+2

Chạy jsperf hôm nay trong Chrome 59.0.3071, regex nhanh hơn 8% –

0
var str = "I expect five hundred dollars ($500) ($1)."; 
var rex = /\$\d+(?=\))/; 
alert(rex.exec(str)); 

sẽ phù hợp với số đầu tiên bắt đầu với một $ và sau đó bởi ')'. ')' sẽ không là một phần của trận đấu. Mã cảnh báo với trận đấu đầu tiên.

var str = "I expect five hundred dollars ($500) ($1)."; 
var rex = /\$\d+(?=\))/g; 
var matches = str.match(rex); 
for (var i = 0; i < matches.length; i++) 
{ 
    alert(matches[i]); 
} 

Mã này cảnh báo với tất cả các kết quả phù hợp.

Tài liệu tham khảo:

tìm kiếm http://www.w3schools.com/jsref/jsref_obj_regexp.asp

tìm kiếm cho "x (= y?)" https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp

4

Ported Mr_Green's answer đến một phong cách lập trình chức năng để tránh sử dụng "= n?" các biến toàn cầu tạm thời.

var matches = string2.split('[') 
    .filter(function(v){ return v.indexOf(']') > -1}) 
    .map(function(value) { 
    return value.split(']')[0] 
    }) 
1

giải pháp đơn giản

Thông báo: giải pháp này sử dụng cho chuỗi mà chỉ có duy nhất "(" và ")" như chuỗi trong câu hỏi này.

("I expect five hundred dollars ($500).").match(/\((.*)\)/).pop(); 

Online demo (jsfiddle)

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