求正则表达式:匹配符合规则且不含confirmation的URL页面标识
正则表达式解决方案
针对你的需求——从URL中捕获页面标识,同时排除包含confirmation的URL,这里提供一个精准的正则表达式,并拆解每个部分的作用:
最终正则表达式
^(?!.*confirmation).*#\/([^?]+)(?:\?.*)?$
规则拆解
我们逐个分析正则的组成部分,帮你理解它如何满足需求:
^(?!.*confirmation):负向前瞻断言,确保整个URL字符串中不包含confirmation这个词。如果URL里有这个词,直接跳过不匹配。.*#\/:匹配#/之前的所有内容(比如域名、路径前缀等),准确定位到页面标识的起始位置。([^?]+):捕获组,这是我们要提取的页面标识部分。[^?]+表示匹配除了?之外的所有字符,直到遇到?(参数起始符)或者行尾。(?:\?.*)?:非捕获组,用来匹配URL中可选的参数部分(比如?courseName=abc&courceTitle=MyTitle),?表示这部分是可选的,不会被捕获。$:匹配行尾,确保我们匹配的是完整的URL字符串。
匹配测试
我们用你提供的示例来验证:
有效匹配(会捕获页面标识)
https://www.example.com/course/home#/→ 捕获到:(空字符串,对应Home标识)https://www.example.com/tag/mypage/course/#/courseSummary?courseName=abc&courceTitle=MyTitle→ 捕获到:courseSummaryhttps://www.example.com/tag/mypage/course/#/options/grounddetails→ 捕获到:options/grounddetailshttps://www.example.com/tag/mypage/course/#/options/Certification/segment→ 捕获到:options/Certification/segmenthttps://www.example.com/tag/mypage/course/#/checkout/customer→ 捕获到:checkout/customer
无效匹配(会被排除)
https://www.example.com/tag/mypage/course/#/confirmation?success=true→ 因为包含confirmation,不会被匹配
自定义调整
如果你只需要捕获路径的最后一段(比如从options/grounddetails中只提取grounddetails),可以把正则修改为:
^(?!.*confirmation).*#\/.*\/([^/?]+)(?:\?.*)?$
这个版本会捕获#/之后最后一个斜杠到?或行尾的部分,比如上面的grounddetails、customer等。
内容的提问来源于stack exchange,提问作者Nitin D
相关产品推荐
相关产品推荐

