it-swarm.com.de

Javascript-Regex erhält ein Array aller Treffer, nicht nur das erste Vorkommen

Ich versuche, alle Instanzen von rel| oder syn| und jedes Word danach zu finden. Ich habe den korrekten Regex, wie Sie hier sehen können: https://regex101.com/r/E7RsbZ/1 aber wenn ich ihn in meine JS stecke, scheint er nur mit der ersten Instanz von rel| oder syn| übereinzustimmen . Hier ist der entsprechende Code: 

var regex = /(syn|rel)\|[a-zA-Z]*/mgi;

var regexed1 = regex.exec(text);

Wenn Text der Eingabe regex101 entspricht, wird das Array ['syn|felicitous', 'syn'] zurückgegeben.

Ich bin nicht sicher, warum das so ist. Was ich zurückgeben möchte, ist ein Array, das alle Instanzen von rel| oder syn| enthält, damit ich es .toString() ausdrucken und ausdrucken kann. Ich fand diese SO Antwort was bedeutet, dass ich eine Schleife verwenden sollte, aber das Problem ist, dass ich nicht immer weiß, wie viele Instanzen von rel| oder syn| es gibt, also kann ich nicht hart codieren wie oft es wiederholt werden soll.

Jede Hilfe wäre willkommen, nicht sicher, wohin sie gehen soll.

5
Egrodo

Sie suchen nach String#match , das ein Array zurückgibt, das alle Übereinstimmungen enthält, wenn der übergebene reguläre Ausdruck das globale Flag (g) hat:

var string = '\
adjective|syn|felicitous\
adjective|syn|glad\
adjective|syn|well-chosen\
adjective|ant|unhappy\
adjective|rel|felicitous\
adjective|rel|glad\
adjective|rel|cheerful\
adjective|rel|content\
adjective|rel|contented\
adjective|rel|elated\
adjective|rel|euphoric\
adjective|rel|joyful\
adjective|rel|joyous\
adjective|sim|felicitous\
adjective|sim|blessed\
adjective|sim|blissful\
adjective|sim|bright\
adjective|sim|fortunate\
adjective|sim|golden\
adjective|sim|halcyon\
adjective|sim|laughing\
adjective|sim|prosperous\
adjective|sim|riant\
adjective|sim|willing\
'

var regex = /(syn|rel)\|[a-zA-Z]*/mgi;

var matches = string.match(regex)

console.log(matches)
.as-console-wrapper { min-height: 100vh; }

7
gyre

exec () Prüft auf Übereinstimmung in einer Zeichenfolge. Gibt die erste Übereinstimmung zurück.

Sie können match () verwenden, um die gesamten gefundenen übereinstimmenden Zeichen zurückzugeben.

Die match () -Methode ruft die Übereinstimmungen ab, wenn eine Zeichenfolge mit einem regulären Ausdruck verglichen wird.

Syntax:

str.match(regexp)

weitere Informationen finden Sie unter MDN

1
Abhijith s.s