2017-04-14 2 views
0

habe ich versucht, diesen Code:Wie gibt man mehrere Übereinstimmungen mit regexp zurück?

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

mehrere Spiele von Text wie folgt zurück: einig [[text]] und auch [[mehr]] Text. Aber anstelle von text, more gibt es nur text zurück. Was mache ich falsch? Vielen Dank im Voraus.

+0

@FPeter Wie bekommst du das 'match'? – kennytm

+3

@dawg Es ist nichts falsch mit der Regex. –

+0

Verwenden Sie 'match()' oder 'exec()'? Letzteres gibt nur die erste auftretende Übereinstimmung zurück und erfordert eine while-Schleife, um alle übereinstimmenden Gruppen abzurufen. – Terry

Antwort

0

Die Regex ist ok:

var test = "[[text]] and even [[more]] text.".match(/\[\[(.*?)\]\]/g); 
console.log(a); 
> ["[[text]]", "[[more]]"] 
+1

Sie haben eine Antwort geschrieben, um zu sagen * regex ist korrekt * – Mohammad

0

Ihre Regex korrekt ist, welche die globale Deckungsflag /g enthält.

Wenn Sie die match Methode verwenden, sollte es gut funktionieren.

var stringToTest = "some [[text\]\] and even [[more]] text"; 
 
var regexToTest = /\[\[(.*?)\]\]/g; 
 

 
var matches = stringToTest.match(regexToTest); 
 
console.log(matches)

+1

Sie haben eine Antwort geschrieben, um zu sagen * Ihre Regex ist korrekt * – Mohammad

+0

Sie zeigt auch die Übereinstimmungsmethode und die Art, wie sie in JS funktionieren sollte. – Agalo

+0

Wie kommen die Streichhölzer die eckigen Klammern zurück? Wie würden Sie dies ändern, um _only_ den Inhalt zwischen den normalen geschweiften Klammern ('. *?') Zurückzugeben? – Pineda

0

Versuchen Sie, die ganze regulären Ausdruck mehrfach anzupassen. So: /([[.*?]])+/g

Verwandte Themen