显然,我不是正则表达式专家,但通过搜索字符串,我为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#!:.^?+=&%@!\-\/]
但找不到权限序列
这样的事情可能吗?
碧玉
答案 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]);