2012-05-05 35 views

Trả lời

8

Hãy thử điều này

\(([^)]*)\)[^(]*$ 

Xem nó here on regexr

var someText="don't extract(value_a) but extract(value_b)"; 
alert(someText.match(/\(([^)]*)\)[^(]*$/)[1]); 

Phần bên trong dấu ngoặc được lưu trữ trong chụp nhóm 1, do bạn cần phải sử dụng match()[1] để truy cập kết quả.

+0

tác phẩm này cảm ơn rất nhiều .. – user1376366

5
/\([^()]+\)(?=[^()]*$)/ 

Cái nhìn, (?=[^()]*$), khẳng định rằng không còn dấu ngoặc đơn nào trước khi kết thúc đầu vào.

+0

này mang lại cho tôi văn bản và khung. (value_b) .. Tôi muốn o/p là giá trị_b không có dấu ngoặc .. – user1376366

0

Nếu giá đóng cuối cùng luôn ở cuối câu, bạn có thể sử dụng câu trả lời của Jonathans. Nếu một cái gì đó như thế này có thể làm việc:

/\((\w+)\)(?:(?!\(\w+\)).)*$/ 
2

Một giải pháp hiệu quả là để cho tất cả mọi thứ trước khi .* eat up(

var str = "don't extract(value_a) but extract(value_b)"; 
 

 
var res = str.match(/.*\(([^)]+)\)/)[1]; 
 

 
console.log(res);

  • .*\( trận đấu cuối cùng của any amountany character cho đến khi cuối cùng đen (
  • ([^)]+)captures một hoặc nhiều ký tự that are not)
  • [1]grab captures của nhóm 1 (nhóm chụp đầu tiên).
  • sử dụng [\s\S] thay vì . chấm cho các chuỗi nhiều dòng.

Here is a demo at regex101

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