0

私はこの正規表現を持っています:

((?:website.com\/video\/)(\d+))|((?:video_id=)(\d+))

そして、必要なパターンとうまく一致します(例: http://website.com/video/1337http://website.com/video/?video_id1337 )。

ただし、URL からトークンを抽出する必要がある場合があります (トークンが常に存在するとは限りません)。そのため、URL の例はhttp://website.com/video/?video_id1337&token=1337videoになります。

トークンを抽出できる別の正規表現があります。/(?:token=)(\w+)/これは機能しますが、2つの正規表現をグループ化しようとすると、2番目の正規表現が機能しなくなります。それらをグループ化しようとしている方法は次のとおりです。

((?:website.com\/video\/)(\d+))|((?:video_id=)(\d+)|(?:token=)(\w+))

両方が機能するように、それらを適切にグループ化するにはどうすればよいですか?

4

2 に答える 2

4

あなたはあなたのマッチングを考えすぎています。一致させたいのは次のとおりです。

  1. website.com/video/、 に続く
  2. たぶん ?video_id、続いて
  3. 動画の ID 番号、その後に続く
  4. たぶんトークン

これは次のように変換されます。

  1. website\.com/video/
  2. (?:\?video_id)?
  3. (\d+)(グループに保存)
  4. (?:[?&]token=(.*))?( または のいずれ?か、グループに保存された&後のすべて)=

最終結果:

website\.com/video/(?:\?video_id)?(\d+)(?:[?&]token=(.*))?
于 2013-09-17T13:56:37.583 に答える
-1

あなたの正規表現は

(?:website.com/video/)((\d+)|([?]video_id(\d+))([&]token=(\d+))?)

「g」修飾子を追加してグローバル検索に切り替えます

var result = mystring.match(/(?:website.com\/video\/)((\d+)|([?]video_id(\d+))([&]token=(\d+))?)/g);
于 2013-09-17T14:05:20.230 に答える