2011-08-26 51 views
11

Tôi có chuỗi sau đây: pass[1][2011-08-21][total_passes]Regex để lấy dây giữa dấu ngoặc vuông

Làm thế nào tôi có thể trích xuất các mục giữa các dấu ngoặc vuông vào một mảng? Tôi cố gắng

match(/\[(.*?)\]/);

var s = 'pass[1][2011-08-21][total_passes]'; 
 
var result = s.match(/\[(.*?)\]/); 
 

 
console.log(result);

nhưng chỉ trả lại này [1].

Không chắc chắn cách thực hiện việc này .. Cảm ơn bạn trước.

Trả lời

27

Bạn đang ở gần đó, bạn chỉ cần một global match (chú ý /g cờ):

match(/\[(.*?)\]/g); 

Ví dụ: http://jsfiddle.net/kobi/Rbdj4/

Nếu bạn muốn một cái gì đó mà chỉ chụp nhóm (từ MDN):

var s = "pass[1][2011-08-21][total_passes]"; 
var matches = []; 

var pattern = /\[(.*?)\]/g; 
var match; 
while ((match = pattern.exec(s)) != null) 
{ 
    matches.push(match[1]); 
} 

Ví dụ: http://jsfiddle.net/kobi/6a7XN/

.210

Một tùy chọn khác (mà tôi thường thích), được lạm dụng callback thay thế:

var matches = []; 
s.replace(/\[(.*?)\]/g, function(g0,g1){matches.push(g1);}) 

Ví dụ: http://jsfiddle.net/kobi/6CEzP/

+0

Điều này trả về các chuỗi tôi muốn, nhưng chúng vẫn nằm trong dấu ngoặc đơn – Growler

+0

Tôi đang cố gắng phân tích nội dung mảng trong nhiều dòng. Đây là ví dụ. 'xuất các tuyến đường const: Tuyến đường = [ {path: '', pathMatch: 'full', redirectTo: 'tree'}, {path: 'components', redirectTo: 'components/tree'}, {path: ' thành phần/cây ', thành phần: CstdTree}, {path:' components/chips ', thành phần: CstdChips} ]; –

0

thêm lá cờ toàn cầu để regex của bạn, và lặp mảng trả về.

match(/\[(.*?)\]/g) 
4
var s = 'pass[1][2011-08-21][total_passes]'; 

r = s.match(/\[([^\]]*)\]/g); 

r ; //# => [ '[1]', '[2011-08-21]', '[total_passes]' ] 

example proving the edge case of unbalanced []; 

var s = 'pass[1]]][2011-08-21][total_passes]'; 

r = s.match(/\[([^\]]*)\]/g); 

r; //# => [ '[1]', '[2011-08-21]', '[total_passes]' ] 
-1

[C#]

 string str1 = " pass[1][2011-08-21][total_passes]"; 
     string matching = @"\[(.*?)\]"; 
     Regex reg = new Regex(matching); 
     MatchCollection matches = reg.Matches(str1); 

bạn có thể sử dụng foreach cho chuỗi phù hợp.

0

Tôi không chắc chắn liệu bạn có thể đưa trực tiếp điều này vào một mảng hay không. Nhưng mã sau đây sẽ hoạt động để tìm tất cả các lần xuất hiện và sau đó xử lý chúng:

var string = "pass[1][2011-08-21][total_passes]"; 
var regex = /\[([^\]]*)\]/g; 

while (match = regex.exec(string)) { 
    alert(match[1]); 
} 

Xin lưu ý: tôi thực sự nghĩ bạn cần lớp nhân vật [^ \]] tại đây. Nếu không, trong bài kiểm tra của tôi, biểu thức sẽ khớp với chuỗi lỗ vì] cũng khớp với. *.

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