Maison >interface Web >js tutoriel >Analyse de l'utilisation du modificateur d'expression régulière JS global(/g)
L'exemple de cet article décrit l'utilisation du modificateur d'expression régulière JS global(/g). Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
/g le modificateur représente la correspondance globale, recherchant toutes les correspondances au lieu de s'arrêter après avoir trouvé la première correspondance. Regardons d'abord un morceau de code classique :
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
Vous pouvez voir : Lorsque vous utilisez le mode /g, les résultats de sortie de RegExp.test() sont exécutés plusieurs fois. Il y aura une différence.
Lors de la création d'un objet d'expression régulière, si l'identifiant "g" est utilisé ou si sa valeur d'attribut ?global est définie sur true, l'objet d'expression régulière nouvellement créé utilisera le modèle pour correspondre. Les chaînes correspondent globalement. En mode de correspondance globale, plusieurs correspondances peuvent être effectuées sur la chaîne spécifiée à trouver. Chaque correspondance utilise la valeur de l'attribut lastIndex de l'objet régulier actuel comme position de départ pour lancer la recherche dans la chaîne cible. La valeur initiale de l'attribut lastIndex est 0. Une fois qu'un élément correspondant est trouvé, la valeur de lastIndex est réinitialisée à l'index de position du caractère suivant du contenu correspondant dans la chaîne, qui est utilisé pour identifier la position où commencer la recherche. la prochaine fois qu'un match sera joué. Si aucun élément correspondant n'est trouvé, la valeur de lastIndex sera définie sur 0. Lorsque l'indicateur de correspondance globale de l'objet normal n'est pas défini, la valeur de l'attribut lastIndex est toujours 0 et chaque fois qu'une correspondance est effectuée, seul le premier élément correspondant de la chaîne est trouvé.
Vous pouvez vérifier les performances de lastIndex en mode /g grâce au code suivant :
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,没有找到匹配项被重置
Ci-dessus nous avons vu l'impact du mode /g sur la fonction RegExp.test(), Voyons maintenant l'impact sur la fonction RegExp.exec(). RegExp.exec() renvoie un tableau contenant les résultats correspondants. Si aucune correspondance n'est trouvée, la valeur de retour est nulle.
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中的索引
Pour la méthode RegExp.exec, si g n'est pas ajouté, seule la première correspondance sera renvoyée, quel que soit le nombre de fois il est exécuté ; si g est ajouté, la première exécution renverra également la première correspondance, et la deuxième exécution renverra la deuxième correspondance, et ainsi de suite.
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
Lors de l'utilisation du mode de correspondance /g, nous pouvons obtenir toutes les correspondances via une boucle.
var str = "012345678901234567890123456789"; var globalre = /123/g; //循环遍历,获取所有匹配 var result = null; while ((result = globalre.exec(str)) != null) { console.log(result[0]); console.log(globalre.lastIndex); }
J'espère que cet article sera utile à tout le monde dans la programmation JavaScript.
Pour plus d'articles liés à l'analyse de l'utilisation du modificateur d'expression régulière JS global(/g), veuillez faire attention au site Web PHP chinois !