1

3 つの後方参照をキャプチャする正規表現がありますが、1 つ (2 つ目) はnull.

流れる文字列を考えると:

http://www.google.co.uk/url?sa=t&rct=j&q=site%3Ajonathonoat.es&source=web&cd=1&ved=0CC8QFjAA&url=http%3A%2F%2Fjonathonoat.es%2Fbritish-mozcast%2F&ei=MQj9UKejDYeS0QWruIHgDA&usg=AFQjCNHy1cDoWlIAwyj76wjiM6f2Rpd74w&bvm=bv.41248874,d.d2k,.co.uk,site%3Ajonathonoat.es&source=web,1

qTLD (この場合は .co.uk)、 param、およびparamを取得したいと考えていcdます。

次の正規表現を使用しています。

/.*\.google([a-z\.]*).*q=(.*[^&])?.*cd=(\d*).*/i

cd2番目の後方参照にparamまでの他のパラメーターが含まれていることを除いて、これは機能します。現在、これを取得しています:

["http://www.google.co.uk/url?sa=t&rct=j&q=site%3Ajo…,d.d2k,.co.uk,site%3Ajonathonoat.es&source=web,1 ", ".co.uk", "site%3Ajonathonoat.es&source=web", "1", index: 0, input: "http://www.google.co.uk/url?sa=t&rct=j&q=site%3Ajo…,d.d2k,.co.uk,site%3Ajonathonoat.es&source=web,1"]

1 番目の後方参照は正しく、.co.uk3 番目も同様です。です1。この例では、2番目の後方参照をnull(または未定義など)にするか、単なるqパラメータにする必要がありsite%3Ajonathonoat.esます。現在、sourceパラメーターも含まれています(site%3Ajonathonoat.es&source=web)。

どんな助けでも大歓迎です、ありがとう!

コードの JSFiddle を追加しました。ブラウザ コンソールで出力を確認してください。

4

2 に答える 2

1

文字クラスを否定する場合は、常にクラス自体に乗数を追加します。

/.*\.google([a-z\.]*).*q=([^&]*?)?.*cd=(\d*).*/i

また、* または + は「貪欲」であるため、使用しないことをお勧めします。常に * を使用しますか? または+?文字列内で区切り文字を見つける場合。貪欲さの詳細については、JFFriedls Mastering Rgeular Expressions または単にこちらを確認してください

于 2013-01-21T09:50:36.070 に答える
0

中間グループを次のようにします。

q=([^&]*)

これにより、アンパサンド以外の文字がキャプチャされます。これによりゼロ文字も許可されるため、オプションのグループ ( ?) を削除できます。

作業例: http://rubular.com/r/AJkXxgeX5K

于 2013-01-21T09:48:01.530 に答える