問題:文字列があります。例: 「to」接頭辞なし"to see to be to read"
で 3 つの動詞をキャプチャしたいのですが、この場合はとです。be
see
read
Regex 101 では、この非常に単純な正規表現を試してみましたが、問題は解決しました。
正規表現:/to (\w+)/g
結果: ['be', 'see', 'read']
好奇心のために、正の先読みを使用してこれを別の regexにしましたが、結果は同じでした。
正規表現:/(?=to \w+)\w+ (\w+)/g
結果: ['be', 'see', 'read']
わかった。奇妙なことに、ブラウザ コンソール(Chrome または Firefox) でこの正規表現を実行すると、結果が異なります。次の 2 つの試行では、同じ結果が得られます。プレフィックスを含む3 つのグループすべてです。to
> 'to be to see to read'.match(/to (\w+)/g)
["to be", "to see", "to read"]
> 'to be to see to read'.match(/(?=to \w+)\w+ (\w+)/g)
["to be", "to see", "to read"]
ここで何か不足していますか、それともバグを踏んでいますか?
免責事項:これは宿題ではありません。より大きな問題について検証しているだけです。私は正規表現の専門家ではありませんが、正規表現について少し知っています。
編集: Regex101 にだまされたと思います。それが私に与えたコードサンプルはString#match()
アプローチを示しましたが、この関数は結果のグループに応じて正規表現グループを除外しません。RegExp#exec()
マッチをループするのが一番です!