【问题标题】:create regex expression for url为 url 创建正则表达式
【发布时间】:2018-05-23 15:03:26
【问题描述】:

我将有网址作为任一

http://www.yellowpages.com/randolph-nj/mip/brookside-village-apartments-1041662

http://www.yellowpages.com/randolph-nj/mip/brookside-village-apartments-1041662?from=pubapi_5k2t9

我可以制作的最佳/最有效的正则表达式来匹配这些表达式是什么。基本上,这将是一个适合的 url

/^https?:\/\/www.yellowpages.com\/[\w|-]+\/mip\/[\w|-]+-\d+/

然后有时是问号或不跟from=我编的文字

【问题讨论】:

标签: javascript node.js regex frontend web-frontend


【解决方案1】:

这可能是你要找的吗?

/^https?:\/\/www.yellowpages.com\/[\w|-]+\/mip\/[\w|-]+-\d+(\?from=pubapi_[^\s]{5})?/

上面的正则表达式将匹配基本 url,并且可以选择匹配 ?from=pubapi_ 加上五个非空格字符。

我想知道如何制作它,或者,即?从或不使用它

我认为这一定是您问题的本质。这可以通过使用()? 创建一个可选组来实现(注意末尾的 ? 表示“零或一个”)。我建议在https://regex101.com/ 上玩一下,感受一下这种“高级”正则表达式语法。

【讨论】:

    【解决方案2】:

    在你的正则表达式的第一部分,如果你想逐字匹配它们,你可以转义点 \.

    如果你想匹配一个可选的查询字符串参数,你可以使用一个可选的?非捕获组(?:并断言字符串的结尾$

    你可以匹配查询字符串参数的一些方法:

    • (?:\?from=\w+)? 匹配一个或多个单词字符\w+(将匹配pubapi_5k2t9
    • (?:\?from=pubapi_\w{5})? 匹配 pubapi_ 后面的 5 个单词字符
    • (?:\?from=[^&]+)?$ 使用否定字符类不匹配与号(或使用 \n 扩展字符类以不匹配换行符)

    第一个选项的示例:

    ^https?:\/\/www\.yellowpages\.com\/[\w|-]+\/mip\/[\w|-]+-\d+(?:\?from=\w+)?$

    const strings = [
      "http://www.yellowpages.com/randolph-nj/mip/brookside-village-apartments-1041662",
      "http://www.yellowpages.com/randolph-nj/mip/brookside-village-apartments-1041662?from=pubapi_5k2t9",
      "http://www.yellowpages.com/randolph-nj/mip/brookside-village-apartments-1041662?fro=pubapi_5k2t9"
    ];
    let pattern = /^https?:\/\/www\.yellowpages\.com\/[\w|-]+\/mip\/[\w|-]+-\d+(?:\?from=\w+)?$/;
    
    strings.forEach((s) => {
      console.log(s + " ==> " + pattern.test(s));
    });

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-05
      • 2010-10-01
      • 2016-04-23
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      相关资源
      最近更新 更多