Heim > Web-Frontend > js-Tutorial > Nutzungsanalyse des längsten Matchings (Greedy Matching) und des kürzesten Matchings (Lazy Matching) des regulären js-Ausdrucks

Nutzungsanalyse des längsten Matchings (Greedy Matching) und des kürzesten Matchings (Lazy Matching) des regulären js-Ausdrucks

高洛峰
Freigeben: 2017-01-09 15:57:47
Original
1669 Leute haben es durchsucht

In diesem Artikel wird die Verwendung des längsten Matchings (Greedy Matching) und des kürzesten Matchings (Lazy Matching) von regulären js-Ausdrücken analysiert. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Ich habe kürzlich den Quellcode von RequireJS 2.1.15 gelesen. Am Anfang des Quellcodes sind eine Reihe von Variablen definiert, und es gibt 4 Reguläre Ausdrücke:

var commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,
cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
jsSuffixRegExp = /\.js$/,
currDirRegExp = /^\.\//;
Nach dem Login kopieren

Der reguläre Ausdruck „commentRegExp“ wird zum Abgleichen von Kommentaren im JavaScript-Code verwendet. Informationen zur Verwendung von /m finden Sie in diesem Artikel: Verwendungsanalyse von Multiline (/m) im JS-Modifikator für reguläre Ausdrücke Informationen zur Verwendung von /g finden Sie in diesem Artikel: JS-Regulärausdruck. Ich habe diese Verwendung von *? in commentRegExp noch nie gesehen und finde es sehr seltsam, da * in regulären Ausdrücken 0 oder mehr darstellt und ? 0 oder 1 darstellt. Zuerst dachte ich, diese Schreibweise *? war überflüssig. Ich habe meine Kollegen gebeten, das herauszufinden *? Diese Schreibweise ist Lazy Matching.

alert(/abc([\w]*)/mg.exec("abc1abc2")[0]);//abc1abc2
alert(/abc([\w]*?)/mg.exec("abc1abc2")[0]);//abc
Nach dem Login kopieren

Es kann durch den folgenden Code gesehen werden: Der Unterschied zwischen der längsten Übereinstimmung und der kürzesten Übereinstimmung kann durch diesen Code gesehen werden: Der Unterschied zwischen der längsten Übereinstimmung und der kürzesten Übereinstimmung, man stimmt mit so vielen überein Zeichen wie möglich, eines, das mit möglichst wenigen Zeichen übereinstimmt. Im Allgemeinen verwenden Engines für reguläre Ausdrücke standardmäßig die längste Übereinstimmung. Wenn wir die kürzeste Übereinstimmung wünschen, können wir nach dem Mengenmodifikator ein ? hinzufügen, um die kürzeste Übereinstimmung zu erhalten.

/***注释1****/ var name = "aty"; /***注释2****/
var name = "aty";
Nach dem Login kopieren

Aus dem obigen Code können wir erkennen, warum requirejs beim Abgleichen von Javascript-Kommentaren den kürzesten Matching-Modus *? verwendet. Wenn wir alle Kommentare löschen möchten, sollte die kürzeste Übereinstimmung verwendet werden, andernfalls wird der var name="aty"-Code ersetzt.


Weitere Artikel zur Analyse der Verwendung von regulären js-Ausdrücken mit der längsten Übereinstimmung (Greedy Matching) und der kürzesten Übereinstimmung (Lazy Matching) finden Sie auf der chinesischen PHP-Website!


Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage