Heim  >  Artikel  >  Web-Frontend  >  Beispielanalyse der nicht erfassenden Gruppierungsverwendung regulärer JS-Ausdrücke

Beispielanalyse der nicht erfassenden Gruppierungsverwendung regulärer JS-Ausdrücke

高洛峰
高洛峰Original
2017-01-09 15:48:131353Durchsuche

Das Beispiel in diesem Artikel beschreibt die Verwendung der nicht erfassenden Gruppierung von regulären JS-Ausdrücken. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Als ich mir kürzlich JsonSQL ansah, erfuhr ich durch einen regulären Ausdruck im Quellcode, was nicht erfassende Gruppierung ist und welche Verwendungsszenarien sie hat. In js ist das normale Gruppierungsformat für die Erfassung (XX) und das Gruppierungsformat für die Nichterfassung ist (?:XX). Beginnen wir mit dem Quantifizierer des regulären Ausdrucks, der mindestens einmal vorkommen soll, können wir den regulären Ausdruck /b+/ verwenden. nicht /ab+/. Mit anderen Worten: Wenn Sie Quantoren für mehrere Zeichen verwenden möchten, müssen Sie Klammern verwenden.

var str = "a1***ab1cd2***c2";
var reg1 = /((ab)+\d+)((cd)+\d+)/i;
var reg2 = /((?:ab)+\d+)((?:cd)+\d+)/i;
alert(str.match(reg1));//ab1cd2,ab1,ab,cd2,cd
alert(str.match(reg2));//ab1cd2,ab1,cd2

Sie können den Unterschied zwischen erfassenden Gruppen und nicht erfassenden Gruppen erkennen: Nicht erfassende Gruppen werden nur für den Abgleich verwendet und extrahieren die Gruppe nicht Inhalt. . Mit anderen Worten: Wenn wir nur Klammern verwenden möchten, um einige Zeichen mit Quantoren zu ändern, benötigen wir den Inhalt dieser Gruppe nicht, da es sich um eine nicht erfassende Gruppe handelt.

Der folgende Code wird zum Extrahieren verschiedener Unterfragmente in der SQL-Anweisung verwendet. Er verwendet eine große Anzahl nicht erfassender Gruppen, sodass Sie einen genaueren Blick darauf werfen können.

var returnfields = sql.match(/^\s*SELECT\s+((?:[0-9A-Za-z_]+\s*,\s*)+[0-9A-Za-z_]+ |\*|[0-9A-Za-z_]+)\s+FROM\s+([a-z0-9A-Z_]+)(?: where\s+(.+))?(?:\s+order\s+by\s+([a-z0-9_A-Z]+)(?:\s+(asc|desc|ascnum|descnum)?))?(?:\s+limit\s+(\d+,\d+))?/i);
var ops = {
  fields: returnfields[1].replace('\s','').split(','),
  from: returnfields[2].replace('\s',''),
  where: (returnfields[3] == undefined)? "true":returnfields[3],
  orderby: (returnfields[4] == undefined)? []:returnfields[4].replace('\s','').split(','),
  order: (returnfields[5] == undefined)? "asc":returnfields[5],
  limit: (returnfields[6] == undefined)? []:returnfields[6].replace('\s','').split(',')
};

Zu dieser regulären Regel gibt es mehrere Erklärungen:

1. Feldnamen und Angaben dürfen nur aus Groß- und Kleinbuchstaben bestehen Buchstaben, bestehend aus Zahlen und Unterstrichen.

2. Die Bedingung nach where muss in () platziert werden, sonst kann sie nicht erfüllt werden. Dies unterscheidet sich von echtem SQL.

3. Die folgenden Felder haben drei Formate: Einzelfeld, mehrere Felder (durch Kommas getrennt) und alle Felder (gekennzeichnet durch *).

4. Die Unteranweisung „where“, die Unteranweisung „order by“ und die Unteranweisung „limit“ sind alle optional.

Der folgende Text kann mit dem obigen regulären Ausdruck übereinstimmen:

select age from data where (name=='aty')

Ich hoffe, dieser Artikel wird für alle hilfreich sein, die sich mit JavaScript-Programmierung befassen.

Weitere verwandte Artikel zu nicht erfassenden Gruppierungsverwendungsbeispielen für reguläre JS-Ausdrücke finden Sie auf der chinesischen PHP-Website!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn