Heim  >  Artikel  >  Web-Frontend  >  Nutzungsanalyse des JS-Modifikators für reguläre Ausdrücke global(/g)

Nutzungsanalyse des JS-Modifikators für reguläre Ausdrücke global(/g)

高洛峰
高洛峰Original
2017-01-09 15:35:031432Durchsuche

Das Beispiel in diesem Artikel beschreibt die Verwendung des JS-Modifikators für reguläre Ausdrücke global(/g). Geben Sie es zu Referenzzwecken an alle weiter. Die Details lauten wie folgt: Der Modifikator

/g stellt einen globalen Abgleich dar, bei dem nach allen Übereinstimmungen gesucht wird, anstatt nach dem ersten Treffer anzuhalten. Schauen wir uns zunächst einen klassischen Code an:

var str = "123#abc";
var noglobal = /abc/i;//非全局匹配模式
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出ture
var re = /abc/ig;//全局匹配
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出false
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出false

Sie können Folgendes sehen: Bei Verwendung des /g-Modus werden die Ausgabeergebnisse von RegExp.test angezeigt () werden mehrmals ausgeführt. Es wird einen Unterschied geben.

Wenn beim Erstellen eines regulären Ausdrucksobjekts der Bezeichner „g“ verwendet oder sein Attributwert „?global“ auf „true“ gesetzt ist, verwendet das neu erstellte reguläre Ausdrucksobjekt das Muster zum Abgleichen. Zeichenfolgen werden global abgeglichen. Im globalen Matching-Modus können mehrere Matches für die angegebene zu findende Zeichenfolge durchgeführt werden. Bei jeder Übereinstimmung wird der Wert des lastIndex-Attributs des aktuellen regulären Objekts als Startposition für die Suche in der Zielzeichenfolge verwendet. Der Anfangswert des lastIndex-Attributs ist 0. Nachdem ein passendes Element gefunden wurde, wird der Wert von lastIndex auf den Positionsindex des nächsten Zeichens des übereinstimmenden Inhalts in der Zeichenfolge zurückgesetzt, der zur Identifizierung der Position verwendet wird, an der mit der Suche begonnen werden soll das nächste Mal, wenn ein Spiel durchgeführt wird. Wenn kein passendes Element gefunden wird, wird der Wert von lastIndex auf 0 gesetzt. Wenn das globale Matching-Flag des regulären Objekts nicht gesetzt ist, ist der Wert des lastIndex-Attributs immer 0 und jedes Mal, wenn ein Match durchgeführt wird, wird nur das erste passende Element in der Zeichenfolge gefunden.

Sie können die Leistung von lastIndex im /g-Modus mit dem folgenden Code überprüfen:

var str = "012345678901234567890123456789";
var re = /123/g;
console.log(re.lastIndex); //输出0,正则表达式刚开始创建
console.log(re.test(str)); //输出ture
console.log(re.lastIndex); //输出4
console.log(re.test(str)); //输出true
console.log(re.lastIndex); //输出14
console.log(re.test(str)); //输出ture
console.log(re.lastIndex); //输出24
console.log(re.test(str)); //输出false
console.log(re.lastIndex); //输出0,没有找到匹配项被重置

Oben haben wir die Auswirkung des /g-Modus auf die Funktion RegExp.test() gesehen. Schauen wir uns nun die Auswirkungen auf die Funktion RegExp.exec() an. RegExp.exec() gibt ein Array zurück, das die passenden Ergebnisse enthält. Wenn keine Übereinstimmung gefunden wird, ist der Rückgabewert null.

var str = "012345678901234567890123456789";
var re = /abc/;
//exec没有找到匹配
console.log(re.exec(str));//null
console.log(re.lastIndex);//0
var str = "012345678901234567890123456789";
var re = /123/;
var resultArray = re.exec(str);
console.log(resultArray[0]);//匹配结果123
console.log(resultArray.input);//目标字符串str
console.log(resultArray.index);//匹配结果在原始字符串str中的索引

Wenn g für die RegExp.exec-Methode nicht hinzugefügt wird, wird nur die erste Übereinstimmung zurückgegeben, egal wie oft es wird ausgeführt; wenn g hinzugefügt wird, gibt die erste Ausführung auch die erste Übereinstimmung zurück, und die zweite Ausführung gibt die zweite Übereinstimmung zurück und so weiter.

var str = "012345678901234567890123456789";
var re = /123/;
var globalre = /123/g;
//非全局匹配
var resultArray = re.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出1
console.log(globalre.lastIndex);//输出0
var resultArray = re.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出1
console.log(globalre.lastIndex);//输出0
//全局匹配
var resultArray = globalre.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出1
console.log(globalre.lastIndex);//输出4
var resultArray = globalre.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出11
console.log(globalre.lastIndex);//输出14

Bei Verwendung des /g-Matching-Modus können wir alle Übereinstimmungen durch eine Schleife abrufen.

var str = "012345678901234567890123456789";
var globalre = /123/g;
//循环遍历,获取所有匹配
var result = null;
while ((result = globalre.exec(str)) != null)
{
 console.log(result[0]);
 console.log(globalre.lastIndex);
}

Ich hoffe, dass dieser Artikel für alle in der JavaScript-Programmierung hilfreich sein wird.

Weitere Artikel zur Nutzungsanalyse des JS-Modifikators für reguläre Ausdrücke global(/g) 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