将两个正则表达式组合在一起

时间:2013-09-17 13:48:52

标签: javascript jquery regex

我有这个正则表达式:

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

它与我需要的模式匹配得很好(例如:http://website.com/video/1337http://website.com/video/?video_id1337)。

但有时我可能需要从网址中提取令牌(令牌并不总是存在), 所以一个示例网址是http://website.com/video/?video_id1337&token=1337video

我有一个单独的正则表达式,可以提取令牌:/(?:token=)(\w+)/有效,但我尝试将两个正则表达式组合在一起,第二个停止工作,这是我试图将它们分组的方式:

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

如何正确分组,以便它们都有效?

2 个答案:

答案 0 :(得分:4)

你正在过度思考你的匹配。你想要匹配的是:

  1. website.com/video/,然后是
  2. 可能 ?video_id,其次是
  3. 视频的ID号,然后是
  4. 可能代币
  5. 转换为:

    1. website\.com/video/
    2. (?:\?video_id)?
    3. (\d+)(保存到群组中)
    4. (?:[?&]token=(.*))??&=保存到群组后的所有内容)
    5. 最终结果:

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

答案 1 :(得分:-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);