繁体   English   中英

为网址创建正则表达式

[英]create regex expression for url

我将拥有网址

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

我可以匹配它们的最佳/最有效的正则表达式是什么。 基本上,这将是一个网址拟合

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

然后有时候问号或不跟我组成的from=文字

可能这就是您要找的东西吗?

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

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

我想知道如何使用或不使用它

我想那一定是你问题的实质。 这可以通过使用()?创建可选组来实现()? (请注意末尾的表示“零或其中之一”)。 我建议在https://regex101.com/上玩一下,以了解这种“高级”正则表达式语法。

在正则表达式的第一部分,您可以转义点\\. 如果您想从字面上匹配它们。

如果要匹配可选的querystring参数,则可以使用可选的? 非捕获组(?:并声明字符串$的结尾

您可以匹配querystring参数的一些方法:

  • (?:\\?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)); }); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM