⊗jsSpREGL 101 of 294 menu

JavaScriptにおける正規表現の貪欲さの制限

正規表現はデフォルトで貪欲です。 これは、可能な限り多くの文字をキャプチャすることを意味します。 例を使って見てみましょう。次のような文字列があるとします:

let str = 'aeeex zzz x kkk';

この文字列で、パターン文字 'a'、次に任意の文字が1回以上、次に文字'x'に基づいて 部分文字列'aeeex'を見つけたいとします。

let res = str.replace(/a.+x/g, '!');

結果、変数には文字列'! zzz x kkk'が書き込まれると予想します。しかし、 そうはならず、変数には文字列'! kkk'が入ります。

理由は、私たちの正規表現が文字'a'から文字'x'までのすべての 文字を探しているからです。 しかし、私たちの文字列には2つの文字'x'があります!貪欲さのため、 正規表現は最後の'x'まで探しに行き、その結果、予想とは異なる部分をキャプチャしてしまうのです。

もちろん、多くの場合、この動作はまさに私たちが必要としているものです。 しかし、この具体的なケースでは、貪欲さをキャンセルし、正規表現に最初の'x'まで 探すように指示したいのです。

貪欲さを制限するには、繰り返し演算子の後に疑問符を置きます:

let res = str.replace(/a.+?x/g, '!');

貪欲さはすべての繰り返し演算子に対して制限できます:*?{} 全てに対して、このように:*???{}?

次の文字列が与えられます:

let str = 'aba accca azzza wwwwa';

両端が文字'a'で囲まれたすべての文字列を見つけ、 それぞれを'!'に置き換える正規表現を書いてください。 文字'a'の間には('a'以外の)任意の文字を入れることができます。

日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否