正则表达式:禁止在网站网址字段中添加问号

时间:2017-02-13 15:05:17

标签: regex

显然,我不是正则表达式专家,但通过搜索字符串,我为URL字段制作了以下正则表达式。

(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?

但我遇到的问题是人们在url字段中添加refferal ID,我想阻止它。

例如,网址如:

http://www.website.com/subdir/foo?item=234

应转换为问号之前的所有内容:

http://www.website.com/subdir/foo

我认为部分[\w#!:.?+=&%@!\-\/]应该保留此字符串并尝试各种选项,方法是将部分更改为[^?]*以阻止?,从而导致[\w#!:.^?+=&%@!\-\/]但找不到权限序列

这样的事情可能吗?

碧玉

1 个答案:

答案 0 :(得分:0)

如果您要删除标有问号的网址选项,您只需提取问号前面的所有内容,然后只使用此部分。

如果要使用正则表达式执行此操作,可以使用以下模式:

(https?:\/\/.*?)(?:\?.*)?$

然后寻找第一组$1

  • (https?:\/\/.*?)匹配http://https://组,后跟任意字符尽可能少的字符
  • (?:\?.*)?随后是一个可选的非捕获组(?:)(您不想与此匹配)与问号以及之后的任意数量的字符。
  • $标记字符串的结尾。这可以确保第一组扩展到字符串结尾,即使其中没​​有问号。



var regex = /(https?:\/\/.*?)(?:\?.*)?$/;
var url1 = "http://www.google.com/test?parameter=1";
var url2 = "https://www.google.com/?";
var url3 = "https://google.com";

console.log(regex.exec(url1)[1]);
console.log(regex.exec(url2)[1]);
console.log(regex.exec(url3)[1]);