ホームページ > ウェブフロントエンド > jsチュートリアル > JS正規表現の最長一致(貪欲一致)と最短一致(遅延一致)の使用状況分析

JS正規表現の最長一致(貪欲一致)と最短一致(遅延一致)の使用状況分析

高洛峰
リリース: 2017-01-09 15:57:47
オリジナル
1670 人が閲覧しました

この記事では、js 正規表現の最長一致 (貪欲一致) と最短一致 (遅延一致) の使用法を例を通して分析します。参考までに皆さんと共有してください。詳細は次のとおりです:

最近、RequireJS 2.1.15 ソース コードを読んでいると、ソース コードの先頭に一連の変数が定義されており、正規表現が 4 つあります:

var commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,
cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
jsSuffixRegExp = /\.js$/,
currDirRegExp = /^\.\//;
ログイン後にコピー

commentRegExp正規表現は JavaScript コードと一致するために使用されます。 注: /m の使用法については、次の記事を参照してください。 JS 正規表現修飾子における複数行 (/m) の使用法分析 /g の使用法については、次の記事を参照してください。 JS正規表現修飾子グローバル(/g)の使用状況分析。 commentRegExp で *? を使用するのは初めてで、正規表現では * が 0 以上を表し、? が 0 または 1 を表すので、非常に奇妙だと思います。冗長でした。同僚に聞いてみると、 *? この書き方は遅延マッチングです。

alert(/abc([\w]*)/mg.exec("abc1abc2")[0]);//abc1abc2
alert(/abc([\w]*?)/mg.exec("abc1abc2")[0]);//abc
ログイン後にコピー

それは、次のコードを通して見ることができます: 最長一致と最短一致の違いは、このコードを通して見ることができます: 最長一致と最短一致の違いは、できるだけ多くの文字に一致し、その他は、可能な限り少ない文字に一致します。一般に、正規表現エンジンはデフォルトで最長一致を使用します。最短一致が必要な場合は、数量修飾子の後に ? を追加すると最短一致になります。

/***注释1****/ var name = "aty"; /***注释2****/
var name = "aty";
ログイン後にコピー

上記のコードから、requirejs が JavaScript コメントを照合するときに *? の最短照合モードを使用する理由がわかります。すべてのコメントを削除したい場合は、最も短い一致を使用する必要があります。そうでない場合は、var name="aty"; コードが置き換えられます。


その他の js 正規表現の最長一致 (貪欲一致) および最短一致 (遅延一致) の使用分析関連記事については、PHP 中国語 Web サイトに注目してください。


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート