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

Grouping two regular expressions together

本文关键字:正则表达式 组合 在一起 两个      更新时间:2023-09-26

我有这个正则表达式:

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

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

但是有时我可能需要从 url 中提取令牌(令牌并不总是存在),因此,将 http://website.com/video/?video_id1337&token=1337video 示例 URL。

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

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

如何正确对它们进行分组,以便它们都正常工作?

你过度考虑了你的匹配。 您要匹配的是:

  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=(.*))?

你的正则表达式应该是

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

并通过添加"g"修饰符切换到全局搜索

var result = mystring.match(/(?:website.com'/video'/)(('d+)|([?]video_id('d+))([&]token=('d+))?)/g);