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

Javascript 将两个正则表达式分组在一起,javascript,jquery,regex,Javascript,Jquery,Regex,我有一个正则表达式: ((?:website.com\/video\/)(\d+))|((?:video_id=)(\d+)) 而且它与我需要的模式非常匹配(例如:, ) 但是,有时我可能需要从url中提取令牌(令牌并不总是存在), 因此,一个示例url是 我有一个单独的正则表达式,可以提取令牌:/(?:token=)(\w+/,它可以工作,但是我尝试将两个正则表达式组合在一起。第二个正则表达式停止工作,我尝试将它们组合在一起: ((?:website.com\/video\/)(\d+))|

我有一个正则表达式:

((?:website.com\/video\/)(\d+))|((?:video_id=)(\d+))
而且它与我需要的模式非常匹配(例如:, )

但是,有时我可能需要从url中提取令牌(令牌并不总是存在), 因此,一个示例url是

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

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

我如何才能正确地对它们进行分组,使它们都能工作?

您对匹配的内容考虑过多了。您想要匹配的是:

  • website.com/video/
    ,后跟
  • 可能是
    ?视频\u id
    ,后跟
  • 视频的id号,后跟
  • 也许是个代币
  • 这将转换为:

  • 网站\.com/video/
  • (?:\?视频\u id)?
  • (\d+)
    (保存到组)
  • (?:[?&]token=(.*))?
    &
    ,将
    =
    之后的所有内容保存到组中)
  • 最终结果是:

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

    你想得太多了。您想要匹配的是:

  • website.com/video/
    ,后跟
  • 可能是
    ?视频\u id
    ,后跟
  • 视频的id号,后跟
  • 也许是个代币
  • 这将转换为:

  • 网站\.com/video/
  • (?:\?视频\u id)?
  • (\d+)
    (保存到组)
  • (?:[?&]token=(.*))?
    &
    ,将
    =
    之后的所有内容保存到组中)
  • 最终结果是:

    website\.com/video/(?:\?video_id)?(\d+)(?:[?&]token=(.*))?
    
    你的正则表达式应该是

    (?:website.com/video/)((\d+)|([?]video\u id(\d+)([&]token=(\d+)))
    
    并通过添加“g”修饰符切换到全局搜索

    var result=mystring.match(/(?:website.com\/video\/)((\d+)|([?]video\u id(\d+)([&]token=(\d+)))/g);
    
    您的正则表达式应该是

    (?:website.com/video/)((\d+)|([?]video\u id(\d+)([&]token=(\d+)))
    
    并通过添加“g”修饰符切换到全局搜索

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

    Or'ing两个正则表达式返回第一个匹配的结果,而不是两个都匹配。我应该使用什么运算符使其返回两个结果?创建两个较长的表达式(Or),每个表达式都可以获取所需的内容。或者一个包含可选组匹配部分的长表达式。或者使用两个正则表达式返回第一个匹配的结果,而不是两个都匹配。我应该使用什么运算符使其返回两个结果?创建两个更长的表达式(或),每个表达式都可以获取所需的内容。或者一个带有可选组匹配部分的长表达式。我仍然只得到基本
    http://website.com/video/1337
    表格。调查……这是因为又有几个打字错误,并且意外地在不属于它的地方放了一个=。匹配获得它的所有所需URL now1+Bingo:)。我用Expresso来分析和检查你的表情。是的,我用的是regexpal.com。在
    视频id
    之后,我意外地在最终结果中加入了一个愚蠢的
    =
    :PI仍然只在基本
    上获得匹配http://website.com/video/1337
    表格。调查……这是因为又有几个打字错误,并且意外地在不属于它的地方放了一个=。匹配获得它的所有所需URL now1+Bingo:)。我用Expresso来分析和检查你的表情。是的,我用的是regexpal.com。我不小心在
    video\u id
    :p之后的最终结果中添加了一个愚蠢的
    =
    :p在编辑之后,现在情况更糟了。匹配现在不正确,并且不包括来自令牌的“视频”。始终使用Expresso或regexpal.com之类的工具来验证您的正则表达式结果。这将不起作用,而且效率低下。您必须转义底线中的
    /
    字符以防止语法错误。还有,为什么这里要使用
    g
    ?看起来他只匹配了一个URL。不,它匹配了所有3个URL,但结果很差。抱歉。感谢您的评论:)在您编辑之后,现在情况更糟了。匹配现在不正确,并且不包括来自令牌的“视频”。始终使用Expresso或regexpal.com之类的工具来验证您的正则表达式结果。这将不起作用,而且效率低下。您必须转义底线中的
    /
    字符以防止语法错误。还有,为什么这里要使用
    g
    ?看起来他只匹配了一个URL。不,它匹配了所有3个URL,但结果很差。对不起,谢谢您的评论:)