Javascript Easy RegExp不匹配
我想匹配那些URLJavascript Easy RegExp不匹配,javascript,regex,Javascript,Regex,我想匹配那些URL de-de/checkout/ de-de/checkout/confirm/ 使用RegExp。我尝试了/(.*)\/checkout\/(|$| confirm\/$)/g,但我只得到了两个匹配项 de-de/checkout/ de-de/checkout/ 这可能很容易,但我不知道为什么这不起作用 谢谢你的帮助 删除备选方案中的前导|: /(.*)\/checkout\/($|confirm\/$)/g 正则表达式将选择无界替换组中的最短替换,并且您为其提供了0
de-de/checkout/
de-de/checkout/confirm/
使用RegExp。我尝试了/(.*)\/checkout\/(|$| confirm\/$)/g
,但我只得到了两个匹配项
de-de/checkout/
de-de/checkout/
这可能很容易,但我不知道为什么这不起作用
谢谢你的帮助 删除备选方案中的前导
|
:
/(.*)\/checkout\/($|confirm\/$)/g
正则表达式将选择无界替换组中的最短替换,并且您为其提供了0长度匹配。在当前状态下,您的替换意味着“要么什么都不做,要么字符串结束,要么确认/后跟字符串结束”。我认为这更容易理解:
(.+?)?\/checkout\/(?:confirm\/)?
尽管我不确定您是否需要简单地匹配url(真/假)或捕获de
或您提供的示例之前或之后的任何内容
confirm
被包装到非捕获组中,因为它是唯一可能存在或不存在的路径组件
在regexr.com上有两个匹配项
这是考虑到checkout或confirm是一个关键字您想用相同的正则表达式来匹配这两个关键字,还是每个正则表达式都匹配一个?嗨,Emil,两者都是相同的。
/(.*)\/checkout\/{0,1}(confirm{0,1}\/{0,1}){0,1}/ig
删除第一个|
-将您的regexp粘贴到regexp测试仪(如regex101)中,并阅读类似英语的描述。当涉及到替换时,使用惰性术语(通常用于量词)不是一个好主意。Regex是lazy是一个非常模糊的语句。您还可以补充一点,Regex在未编排的备选组中选择最短的备选方案,因为它与锚定的备选方案没有区别。模式末尾的位置是未编排的,根据NFA regex规范,匹配的第一个备选方案将“获胜”。@Toni2708请参阅。请注意,我必须添加m
多行标志,以便$
匹配第一行的末尾。如果你逐行解析,你不需要这个,也可以考虑使用@ TMSLNZ的答案,这在我看来是比较干净的。我主要是想给你一个关于为什么你的正则表达式不起作用的答案。也许,OP需要确保在签出/
或确认/
之后没有任何东西,所以我建议保留$
-/(*?)\/checkout\/(?:确认\/)?$/
,除此之外,请更具体一些。你的目标网址是什么
(.*)\/checkout\/(confirm\/)?