2017-03-05 4 views
1

Hallo Jungs mach ich re den Ausdruck für die Erfassung andere GruppeJavascript Regex, erneut eine Gruppe verwenden, eine andere Gruppe

Zum Beispiel verwenden möchten:

Ich suche brauchen US $4.5-8.8
Die Struktur ist: Part1- Teil2

die Teil1 und die Teil2 haben den gleichen Code, ich habe die Teil1 wie Gruppe verwenden könnte, und dann wieder Verwendung in der Teil2

ich den Ausdruck bis 4,5-XXXX

doned haben
US \$([0-9]{1}(?=\.{1})\.{1}[0-9]+)(?=\-)\- 

Check-in: https://regex101.com/r/E2MjWh/1

Was soll ich tun, für die Wiederverwendung der ersten Gruppe verwenden? Es ist leicht, in anderen lenguague, aber ich kann es in Javascript nicht tun ..

PD: Ich brauche es in regex, nicht JavaScript-Code wie var schließen ... etc etc ..

+0

Sie können Untermuster nicht rekursiv anzeigen, aber Sie können Variablen definieren und das Muster dynamisch erstellen. Oder verwenden Sie ein einzelnes reguläres Literal wie ['/^US\s+\$(\d*\.?\d+)-(\d*\.?\d+)$$/'](https://regex101.com/ r/DbZvFs/2) –

+0

@ WiktorStribiżew ohh, ok Alter, vielen Dank – Milor123

Antwort

1

Erste , schau dir deine Regex an: die positiven Lookaheads sind dort nicht wirklich notwendig, da sie nur das gleiche wie die folgenden Subpattern erfordern. (?=\.{1})\.{1} bedeutet * erfordert 1 Punkt unmittelbar rechts von der aktuellen Position und dann den Punkt übereinstimmen, und (?=\-)\- hat eine ähnliche Bedeutung erfordert und ein - Symbol entspricht.

Jetzt fragen Sie, ob Sie den gleichen Teil eines Musters nur mit der Regex-Syntax wiederholen können. Nein, das ist in JS regex nicht möglich.

können Sie die folgende Regex verwenden, um die gesamte Zeichenfolge wie das Ihre zum Spiel:

/US\s+\$(\d+\.\d+)-(\d+\.\d+)/ 

die regex demo See. Sicher, Sie können Wortgrenzen hinzufügen (um US als ein ganzes Wort zu entsprechen) oder Anker (um die gesamte Eingabezeichenfolge zu entsprechen) oder \d+\.\d+ Teil durch \d*\.?\d+ ersetzen (um beide Ganzzahlen oder Gleitkommazahlen zu entsprechen), um das Muster weiter zu verbessern.

Es ist ein Weg, um das Muster zu verkürzen, indem die sich wiederholende Teil in eine Variable platzieren und bauen die regex dynamisch den Konstruktor Notation:

var price = "\\d*\\.?\\d+"; 
var reg = new RegExp("US\\s+\\$(" + price + ")-(" + price + ")"); 

die erforderlichen Modifikatoren hinzufügen, falls erforderlich.

Verwandte Themen