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!