Nicht-erfassende Klammern in JavaScript Regex
Klammern ( ) erfüllen zwei Funktionen -
das Gruppieren von Zeichen und die Erfassungsfunktion.
Was aber, wenn wir gruppieren möchten,
aber nicht erfassen wollen?
Um dieses Problem zu lösen, wurden spezielle
nicht-erfassende Klammern (?: )
eingeführt - sie gruppieren, aber erfassen nicht.
Beispiel
Im folgenden Beispiel benötigen wir die ersten Klammern zum Gruppieren und die zweiten zur Erfassung. Allerdings erfassen beide Klammernpaare Daten in die Erfassungsgruppen:
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
Als Ergebnis werden sich in unseren Erfassungsgruppen folgende Daten befinden:
console.log(res[0]); // gibt 'abab123' aus
console.log(res[1]); // gibt 'ab' aus
console.log(res[2]); // gibt '123' aus
Beispiel
Lassen Sie uns die ersten Klammern so ändern, dass sie nur gruppieren, aber nicht erfassen:
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
Als Ergebnis befindet sich unsere Zahl in der ersten Erfassungsgruppe:
console.log(res[1]); // gibt '123' aus