2017-04-17 2 views
3

Ich habe eine Zeichenfolge, die aus meinem Namen christiancattano und ein regulärer Ausdruck Suchmuster als solcheRegex101 und Js regex Suche zeigt unterschiedliche Ergebnisse

/(cattano|cattan|attano|chris|catta|attan|ttano|chri|hris|catt|atta|ttan|tano|chr|hri|ris|cat|att|tta|tan|ano)+/ig 

In regex101 definiert, wenn ich meine Suchmuster in der oberen Leiste eingeben, und geben Sie wörtlich, christiancattano in die Test-String-Box wird es hightlight chris und cattano. Das ist das Verhalten, das ich erwarte.

In meinem Javascript-Code, wenn ich die folgenden Zeilen

var regExPattern: string = '(cattano|cattan|attano|chris|catta|attan|ttano|chri|hris|catt|atta|ttan|tano|chr|hri|ris|cat|att|tta|tan|ano)+'; 

var regExObj: RegExp = new RegExp(regExPattern, 'g'); 

var match: string[] = regExObj.exec('christiancattano'); 

console.log(`match: ${match}`); 

I erhalten diese Ausgabe

match: chris,chris 

Warum ist es, dass regex101 zeigt meine Matches zu sein, was ich erwarte, laufen, chris und cattano, aber Mein Javascript-Code erzeugt ein anderes Ergebnis?

+3

Verwenden 'match':' 'christiancattano'.match (regExObj) ' –

+3

In Javascript, wenn Sie ein ausführen RegExp mit dem 'g' Modifier, es gibt nur ein Spiel nach dem anderen zurück. Sie müssen es in einer Schleife aufrufen, um alle Übereinstimmungen zu erhalten. Entferne den Modifikator. – Barmar

+0

@ WiktorStribiżew mein Mann! Du hast es schon wieder getan! Ich danke dir sehr! Ich habe gerade die Unterschiede zwischen string.match() und regex.exec() gelesen und sehe, wo ich falsch gelaufen bin, als ich versuchte, eine Zeichenfolge [] meiner Übereinstimmungen zu erhalten. Vielen Dank noch einmal für Ihre Hilfe heute! – Chris

Antwort

2

RegExp#exec() gibt nur ein einzelnes Match-Objekt zurück, auch wenn Sie eine Regex mit dem Modifikator g verwenden.

Sie String#match mit einem regulären Ausdruck mit dem g Modifikator können alle Übereinstimmungswerte zu erhalten:

var match: string[] = 'christiancattano'.match(regExObj) 
Verwandte Themen