为url创建正则表达式

时间:2018-05-23 15:03:27

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

我会将网址设为

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=文字

2 个答案:

答案 0 :(得分:0)

这可能是你想要的吗?

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

上述正则表达式将匹配基本网址,并可选择匹配?from=pubapi_加上五个非空格字符。

  

我想知道如何使用或者使用

来制作它

这一定是我假设的问题的本质。这可以通过使用()?创建一个可选组来实现(请注意最后的,这意味着'零或一个')。我建议在https://regex101.com/上玩,以了解这种'高级'正则表达式语法。

答案 1 :(得分:0)

在你的正则表达式的第一部分中,如果你想要字面上匹配它们,你可以逃脱点\.

如果要匹配可选的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));
});