我会将网址设为
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=
文字
答案 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 _ (?:\?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));
});