我正在尝试匹配 Javascript 中的几种 URL 模式中的任何一种。模式是:
- 主页 -
/
后面没有任何内容。 - 三个解决方案页面之一。每个
solutions(number)
后面可以跟一个/
及其后的任何字符。/solutions/99043
或/solutions/99043/blah
/solutions/60009
或/solutions/60009/blah
/solutions/40117
或/solutions/40117/blah
- 搜索:
/search
后跟任何字符,例如?废话
。
我尝试的正则表达式如下:
/\/$|\/solutions\/(99043|60009|40117)\/.*|\/search.*/
在此函数中:
(function () {
const urlPath = window.location.pathname;
if (urlPath.match(/\/$|\/solutions\/(99043|60009|40117)\/.*|\/search.*/)) {
console.log("urlPath", urlPath);
}
})()
它不起作用,因为一切似乎都匹配。有人知道我哪里出错了吗?
根据评论,匹配但不应该匹配的 URL 示例:
/解决方案/
最佳答案
您可以使用 anchor 来断言字符串的开始 ^
和结束 $
。
匹配 /
并可选择匹配带有解决方案后跟 3 个数字的部分,或使用 alternation 匹配搜索部分.
^\/(?:solutions\/(?:99043|60009|40117)(?:\/.*)?|search\b.*)?$
^
字符串开头\/
匹配/
(?:
非捕获组解决方案\/
匹配解决方案/
(?:99043|60009|40117)
匹配 3 个数字中的 1 个(?:\/.*)?
可选择匹配/
和除换行符之外的任何字符 0 次以上|
或者search\b.*
匹配搜索,后跟单词边界以不匹配,例如searchhere
)?
关闭非捕获组并使其可选$
字符串结尾
关于javascript - RegEx 使用 Javascript 匹配多个 URL 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58652524/