Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript查找协议、域,加上src标记中带有regexp的第一个斜杠,替换为空字符串_Javascript_Regex - Fatal编程技术网

javascript查找协议、域,加上src标记中带有regexp的第一个斜杠,替换为空字符串

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

我试图为这个任务构造一个正则表达式,但恐怕我仍然无法直观地理解正则表达式

问题是正则表达式一直匹配到字符串中的最后一个斜杠。我想让它在第一根线的匹配处停止

我可怜的regex尝试:

/^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
将只匹配1
c
(?:某物)
将只匹配一个
某物

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对我删除的问题发表评论说,他也想处理相对和绝对链接