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
,后跟网站\.com/video/
(?:\?视频\u id)?
(\d+)
(保存到组)(?:[?&]token=(.*))?
(?
或&
,将=
之后的所有内容保存到组中)website\.com/video/(?:\?video_id)?(\d+)(?:[?&]token=(.*))?
你想得太多了。您想要匹配的是:
website.com/video/
,后跟?视频\u 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,但结果很差。对不起,谢谢您的评论:)