2009-08-03 17 views
19

Oto przypadek: chcę znaleźć elementy, które pasują do wyrażenia regularnego ...Jak zapętlić wszystkie elementy pasujące do wyrażenia regularnego?

targetText = "SomeT1extSomeT2extSomeT3extSomeT4extSomeT5extSomeT6ext"

i używam regex w javascript jak ten

reg = new RegExp(/e(.*?)e/g); 
var result = reg.exec(targetText); 

i otrzymuję tylko pierwszą, ale nie następującą ... Mogę uzyskać tylko T1, ale nie T2, T3 ... ...

+2

Czy ktoś może sugerować sposób pętli na to zrobić? – DNB5brims

Odpowiedz

34
var reg = /e(.*?)e/g; 
var result; 
while((result = reg.exec(targetText)) !== null) { 
    doSomethingWith(result); 
} 
+13

Zamiast używać nowego wyrażenia RegExp, a następnie wstawiania wyrażenia regularnego, po prostu wykonaj 'reg =/e (. *>) E/g;' Użycie nowego operatora jest zbędne, chyba że podajesz ciąg znaków. Upewnij się także, że oznaczono to flagą globalną (/ g) lub możesz skończyć w nieskończonej pętli. – Frug

+4

Należy zauważyć, że wyrażenie regularne musi zostać przypisane do obiektu przed użyciem w ten sposób: '/ e (. *?) E/.exec (...)' da nieskończoną pętlę. – ARM

+0

Mam nieskończoną pętlę dla document.body.innerHTML –

2
targetText = "SomeT1extSomeT2extSomeT3extSomeT4extSomeT5extSomeT6ext"  
reg = new RegExp(/e(.*?)e/g); 
var result; 
while (result = reg.exec(targetText)) 
{ 
    ... 
} 
9

Spróbuj użyć match() na ciąg zamiast exec(), choć mogłeś pętla z exec, jak również. Mecz powinien dać ci wszystkie mecze za jednym razem. Myślę, że możesz również pominąć globalny specyfikator.

reg = new RegExp(/e(.*?)e/); 
var matches = targetText.match(reg); 
+6

Nie linkuj do w3schools. Są niezrzeszeni z W3C i mają wiele złych informacji. Zobacz http://w3fools.com. – dbkaplun

+2

@MindVirus - jeśli chcesz sprawdzić, wyczyścili wiele rzeczy, które wskazał w3fools.com. Nadal używam ich jako szybkiego, choć nie ostatecznego, zasobu. Podobnie jak w przypadku K & R C można użyć arkusza oszukującego, aby wyszukać coś prostego. – tvanfosson

+1

Jako program pośredniczący, już w W3schools spotkałem się z kilkoma jasnymi błędami. Nie mają mojej listy imprez. –

Powiązane problemy