2012-06-13 43 views
8

thể trùng lặp:
Regular Expression to find a string included between two characters, while EXCLUDING the delimitersRegEx để có được văn bản từ bên trong dấu ngoặc vuông

tôi có một chức năng mà tôi có để có được văn bản được đính kèm trong dấu ngoặc vuông nhưng không khung cho ví dụ

this is [test] line i [want] text [inside] square [brackets] 

từ dòng trên tôi muốn từ

kiểm tra

muốn

bên

ngoặc

tôi đang cố gắng với làm điều này với /\[(.*?)\]/g nhưng tôi không nhận được kết quả hài lòng tôi nhận được từ bên trong dấu ngoặc mà còn dấu ngoặc đó là không phải những gì tôi muốn

tôi đã tìm kiếm một số loại câu hỏi tương tự trên SO nhưng không có giải pháp nào hoạt động đúng cách cho tôi ở đây là một trong những gì được tìm thấy (?<=\[)[^]]+(?=\]) này hoạt động trong huấn luyện viên RegEx nhưng không phải với javascript. Dưới đây là refrence từ nơi tôi đã nhận này

đây là những gì tôi đã làm cho đến nay demo

xin vui lòng giúp

+0

trùng lặp không chính xác của nó vuông khung trong không phải là một nhân vật bình thường nó đã được xử lý khác nhau sau đó các ký tự khác – sohaan

Trả lời

22

Một lookahead đơn nên làm các trick ở đây:

a = "this is [test] line i [want] text [inside] square [brackets]" 
words = a.match(/[^[\]]+(?=])/g) 

nhưng trong một trường hợp chung, exec hoặc replace vòng dựa trên dẫn đến mã đơn giản hơn:

words = [] 
a.replace(/\[(.+?)\]/g, function($0, $1) { words.push($1) }) 
+0

Có thể xem trước regex không được đơn giản hóa không?/[^ \ [\]] + (? = \])/g – Jules

+0

@Jules: gợi ý tốt, cảm ơn. – georg

5

This fiddle sử dụng RegExp.exec và đầu ra chỉ những gì bên trong dấu ngoặc đơn.

var data = "this is [test] line i [want] text [inside] square [brackets]" 
var re= /\[(.*?)\]/g; 
for(m = re.exec(data); m; m = re.exec(data)){ 
    alert(m[1]) 
} 
+0

Sir bạn có thể vui lòng giải thích cho tôi những gì đang xảy ra trong vòng lặp và chúng ta có thể sử dụng hàm _each() của underscore.js để lặp lại – sohaan

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