javascript - RegEx 使用 Javascript 匹配多个 URL 模式

标签 javascript regex url

我正在尝试匹配 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
  • )? 关闭非捕获组并使其可选
  • $ 字符串结尾

Regex demo

关于javascript - RegEx 使用 Javascript 匹配多个 URL 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58652524/

相关文章:

ios - AVAudioPlayer 不从网站播放 m4a 或 mp3 文件类型

javascript - 完全实现 Ext.QuickTips() 的最低要求是什么?

javascript - 如何处理网页输入框的引号?

javascript - Swiper 库无法使用 Bootstrap 选项卡加载

javascript - 未收集覆盖信息, Istanbul 尔覆盖。 (页面中类似问题的答案对我不起作用)

正则表达式匹配第 n 次出现并返回字符串的后续部分

regex - PostgreSQL : how to check regex constraint for every item in a varchar array

python - 如何在 python 中修复这个正则表达式?

php - Yii - 使字符串可用于 URL 或文件名

rest - 在 REST 中,两个 URL 是否永远无法标识相同的资源?