javascript查找协议、域,加上src标记中带有regexp的第一个斜杠,替换为空字符串
我试图为这个任务构造一个正则表达式,但恐怕我仍然无法直观地理解正则表达式 问题是正则表达式一直匹配到字符串中的最后一个斜杠。我想让它在第一根线的匹配处停止 我可怜的regex尝试:javascript查找协议、域,加上src标记中带有regexp的第一个斜杠,替换为空字符串,javascript,regex,Javascript,Regex,我试图为这个任务构造一个正则表达式,但恐怕我仍然无法直观地理解正则表达式 问题是正则表达式一直匹配到字符串中的最后一个斜杠。我想让它在第一根线的匹配处停止 我可怜的regex尝试: /^http(s?):\/\/.+\/{1}/ 受试者: http://foo.com/bar/test/foo.jpeg 目标是获得bar/test/foo.jpeg,这样我就可以拆分字符串,弹出最后一个元素,然后加入其余元素,从而获得JavaScript文件的路径 示例 var str = 'http://f
/^http(s?):\/\/.+\/{1}/
受试者:
http://foo.com/bar/test/foo.jpeg
目标是获得bar/test/foo.jpeg
,这样我就可以拆分字符串,弹出最后一个元素,然后加入其余元素,从而获得JavaScript文件的路径
示例
var str = 'http://foo.com/bar/test/foo.jpeg';
str.replace(regexp,'');
使用基于组的正则表达式
> var s = "http://foo.com/bar/test/foo.jpeg"
> s.match(/^https?:\/\/[^\/]+((?:\/[^\/]*)*)/)[1]
'/bar/test/foo.jpeg'
虽然另一个答案显示了如何匹配字符串的一部分,但我认为替换解决方案更适合当前任务 您遇到的问题是,
+
贪婪地匹配除换行符以外的一个或多个字符,也就是说,首先一次抓取所有字符串,然后正则表达式引擎开始回溯(沿输入字符串向后移动,寻找匹配中的/
)。因此,您可以从http
获得匹配,直到最后一个/
要限制从http
到第一个/
的匹配,请使用否定字符类[^/]+
而不是+
^https?:\/\/[^\/]+\/
^^^^^^
看
请注意,不需要将s
放入捕获组以使其成为可选的,未转义的?
是一个量词,使前面的字符匹配一次或零次。另外,{1}
是一个多余的量词,因为这是默认行为,c
将只匹配1c
,(?:某物)
将只匹配一个某物
var re=/^https?:\/\/[^\/]+\/;
var str='1〕http://foo.com/bar/test/foo.jpeg';
var结果=str.replace(re.);
document.getElementById(“r”).innerHTML=result代码>
创建一个location对象,您就可以获得所有信息free@mplungjan如果浏览器不支持location.origin
属性,则不支持。你是什么意思?他不是在要求originI删除我的答案,因为你显然已经决定只有正则表达式可以解决它。如果子字符串丢失,它将失败。你明白吗?因此,[1]
处的索引将是未定义的。是的,这是您所期望的。。不是吗?我特别要求使用替换功能。。。我知道你不会说英语,但最后你的正则表达式工作了,所以谢谢你的时间。你可以检查这个s.replace(/^(https?:\/\/\/[^\/]+)(((?:\/[^\/]*)/,“$1$2”)。拆分(“”)[1]
也不用担心,我能让第一个有效:@mplungjan:你能解释一下你的评论吗?r3wt对我删除的问题发表评论说,他也想处理相对和绝对链接