2011-12-06 12 views
1

私はJavascript RegExp documentationを通して読んでおり、正規表現機能x(?=y)は必要ないと気づきました。なぜなら、x(?:y)と書くことができ、まったく同じことになるからです。(?:foo)がすでに存在する場合、正規表現の(?= foo)のポイントは何ですか?

これは、yが続く場合にのみxと一致し、結果にyを取り込みません。

私は間違っていますか?両者に違いはありますか?

答えて

2

(?=)は、「幅ゼロの正の先読みによるX」です。 (?:)は非キャプチャグループです。

正規表現を使用している(一致対検索など)方法に応じて、肯定先読みと一致する結果が一致結果に含まれない可能性があります。一致結果の[0]グループに含めること。

+0

Ah。私は意味をなさない[0]フィールドを考えなかった。ありがとう。 – fent

0

はい、間違っています。 (?:y)は文字を消費しますが、(?=y)は後でyがあるかどうかをチェックするだけですが、それを消費しないので、たとえば追加のチェックを入れることができます。

関連する問題