私がやろうとしているのは、一致するパターンを抽出することですが、パターンの 1 つがオプションである可能性があります。直接例に行きましょう。
私が一致させようとしているターゲットテキストは、
<foo>\n<bar>\n#####<foo>\n#####<bar>
そして、私の正規表現は、
/(#{5})?/
(ここで ? を使用する理由は、特定のパターンがオプションである可能性があるためです。たとえば、このパターンの「未定義」ではなく、一致が完全にミスになることは望ましくありません。 )
str.match() によって返されると私が期待したのは、
[ '#####',
'#####',
index: 12,
input: '<foo>\n<bar>\n#####<foo>\n#####<bar>' ]
しかし、実際には、
[ '',
undefined,
index: 0,
input: '<foo>\n<bar>\n#####<foo>\n#####<bar>' ]
代わりに次のパターンを使用すると、正常に動作します。
/(#{5})+/
なんで?
nodejs/chrome と IE の両方でこれを試しましたが、どちらも機能しません。これは、この動作が JS エンジン全体で一貫していることを意味します。しかし、私が試した多くのツールの 1 つであるregexpalと同じようには動作しません。それがツール自体の問題なのか、実装が異なるだけなのかはわかりません。