2017-03-11 3 views
-1

Ich versuche, alle Instanzen von entweder rel| oder syn| und ein beliebiges Wort danach zu entsprechen. Ich habe die richtige Regex, wie Sie hier sehen können: https://regex101.com/r/E7RsbZ/1 aber wenn ich es in meine JS einfügen, scheint es nur die erste Instanz von rel| oder syn| zu entsprechen. Hier ist der relevante Code:Javascript Regex erhalten ein Array aller Übereinstimmungen, nicht nur das erste Vorkommen

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

var regexed1 = regex.exec(text); 

Wenn der Text die gleiche wie die regex101 eingegeben wird, es gibt das Array ['syn|felicitous', 'syn'].

Ich bin mir nicht sicher, warum es das tut. Was ich es zurückgeben möchte, ist ein Array, das alle Instanzen von rel| oder syn| enthält, so dass ich .toString() es ausdrucken kann und es ausdrucken. Ich fand this SO answer was bedeutet, dass ich eine Schleife verwenden sollte, aber das Problem ist, ich werde nicht immer wissen, wie viele Instanzen von rel| oder syn| wird es sein, so dass ich nicht fest codieren kann, wie oft es Schleife sollte.

Jede Hilfe mit dieser würde geschätzt werden, nicht sicher, wohin sie gehen.

+0

können Sie ein Beispiel für Text geben pls? – mtizziani

Antwort

3

Sie suchen String#match, die ein Array alle Spiele enthält, zurückgibt, wenn der reguläre Ausdruck übergeben, die globale (g) Flagge 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; }

+1

DIESES ist was ich vermisst habe. Ich danke dir sehr. Ich weiß nicht, wie ich das vermisst habe. – Egrodo

+1

Es ist eine unglaublich nützliche Funktion, versteckt in einem überraschend schwer zu findenden Ort. Die MDN-Dokumentation erwähnt es kaum, also keine Sorge; du bist nicht allein! – gyre

1

exec() Tests für eine Übereinstimmung in einer Zeichenfolge. Gibt die erste Übereinstimmung zurück.

Sie können mit match() alle gefundenen übereinstimmenden Zeichen zurückgeben.

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

Syntax:

str.match(regexp) 

für weitere Informationen siehe MDN

Verwandte Themen