Cet article analyse l'utilisation de la correspondance la plus longue (correspondance gourmande) et de la correspondance la plus courte (correspondance paresseuse) des expressions régulières js. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Je lisais récemment le code source de RequireJS 2.1.15. Une série de variables est définie au début du code source, et il y en a 4. expressions régulières :
var commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg, cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, jsSuffixRegExp = /\.js$/, currDirRegExp = /^\.\//;
commentRegExp l'expression régulière est utilisée pour faire correspondre les commentaires dans le code JavaScript. Pour l'utilisation de /m, veuillez vous référer à cet article : Analyse de l'utilisation de la multiligne (/m) dans le modificateur d'expression régulière JS. . Pour l'utilisation de /g, veuillez vous référer à cet article : Expression régulière JS. Analyse de l'utilisation du modificateur global(/g). Je n'ai jamais vu cette utilisation de *? dans commentRegExp auparavant, et je pense que c'est très étrange, car * représente 0 ou plus dans les expressions régulières, et ? représente 0 ou 1. Au début, je pensais que cette façon d'écrire *? était redondant. J'ai demandé à mes collègues de découvrir que *? Cette façon d'écrire est une correspondance paresseuse.
alert(/abc([\w]*)/mg.exec("abc1abc2")[0]);//abc1abc2 alert(/abc([\w]*?)/mg.exec("abc1abc2")[0]);//abc
Cela se voit à travers le code suivant : La différence entre le match le plus long et le match le plus court peut être vu à travers ce code : La différence entre le match le plus long et le match le plus court, un correspond à plusieurs caractères autant que possible, celui qui correspond au moins de caractères possible. Généralement, les moteurs d'expressions régulières utilisent par défaut la correspondance la plus longue. Si nous voulons la correspondance la plus courte, nous pouvons ajouter un ? après le modificateur de quantité pour devenir la correspondance la plus courte.
/***注释1****/ var name = "aty"; /***注释2****/ var name = "aty";
À partir du code ci-dessus, nous pouvons savoir pourquoi requirejs utilise *? Si nous voulons supprimer tous les commentaires, la correspondance la plus courte doit être utilisée, sinon le code var name="aty";
Pour plus d'articles sur l'analyse de l'utilisation des expressions régulières js correspondant à la correspondance la plus longue (correspondance gourmande) et à la correspondance la plus courte (correspondance paresseuse), veuillez faire attention au site Web PHP chinois !