2012-06-13 30 views
8

Powiel możliwe:
Regular Expression to find a string included between two characters, while EXCLUDING the delimitersRegEx uzyskać tekst od wewnątrz nawiasów kwadratowych

Mam funkcji, gdzie muszę się tekst, który jest ujęty w nawiasy kwadratowe, ale nie wsporników przykład

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

z powyższej linii chcę słów

Test

chcą

wewnątrz

nawiasach

staram się to zrobić z /\[(.*?)\]/g ale nie otrzymuję wynik zadowolony ja dostać słowa w nawiasach, ale również nawiasy nie to, co chcę

Szukałem podobnego typu pytania na SO, ale żadne z tych rozwiązań nie działa poprawnie dla mnie tutaj jest jeden, który znalazł (?<=\[)[^]]+(?=\]) to działa w trenera RegEx, ale nie z javascript. Oto refrence skąd mam to

Oto co zrobiłem do tej pory demo

pomóż

+0

jej nie dokładną kopią nawias kwadratowy w nie normalnym charakterze musi być traktowany inaczej niż inne postacie – sohaan

Odpowiedz

22

Pojedyncza uprzedzona powinno wystarczyć tutaj:

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

ale w ogólnym przypadku, exec lub replace opartych pętle doprowadzić do uproszczenia kodu:

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

. Czy regex z wyprzedzeniem nie może być uproszczony?/[^ \ [\]] + (? = \])/g – Jules

+0

@Jules: dobra sugestia, dzięki. – georg

5

This fiddle wykorzystuje RegExp.exec i wyjść tylko to, co znajduje się wewnątrz nawiasu.

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

Proszę mi wyjaśnić, co się dzieje w pętli for i możemy użyć funkcji _each() w underscore.js do iterowania – sohaan

Powiązane problemy