javascript查找协议,域,加上src标记中带有regexp的第一个斜杠,替换为空字符串
javascript find protocol, domain, plus first slash with regexp from a src tag, replace with empty string
我试图为这项任务构建一个正则表达式,但恐怕我仍然无法直观地理解正则表达式。
问题是正则表达式匹配到字符串中的最后一个斜杠。我希望它在字符串的第一个匹配处停止。
我可怜的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,'');
虽然另一个答案显示了如何匹配字符串的一部分,但我认为替换解决方案更适合当前任务。
问题是.+
贪婪地匹配换行符以外的一个或多个字符,也就是说,首先一次性获取所有字符串,然后正则表达式引擎开始回溯(沿着输入字符串向后移动,寻找匹配中的/
)。因此,您可以从http
获得匹配,直到最后一个/
。
要限制从http
到第一个/
的匹配,请使用否定字符类[^/]+
而不是.+
。
^https?:'/'/[^'/]+'/
^^^^^^
查看regex演示
请注意,您不需要将s
放入捕获组中使其成为可选的,未捕获的?
是一个使前一个字符匹配一次或零次的量词。此外,{1}
是一个冗余量词,因为这是默认行为,c
将只匹配1个c
,(?:something)
将只匹配一个something
。
var re = /^https?:'/'/[^'/]+'//;
var str = 'http://foo.com/bar/test/foo.jpeg';
var result = str.replace(re, '');
document.getElementById("r").innerHTML = result;
<div id="r"/>
注意,您需要将替换结果分配给某个变量,因为在JS中,字符串是不可变的。
Regex解释:
^
-字符串的开头https?
-http
或https
子字符串:'/'/
——://
的一个文字序列[^'/]+
-除/
之外的1个或多个字符'/
-文字/
符号
使用捕获基于组的正则表达式。
> var s = "http://foo.com/bar/test/foo.jpeg"
> s.match(/^https?:'/'/[^'/]+((?:'/[^'/]*)*)/)[1]
'/bar/test/foo.jpeg'
相关文章:
- 而循环只设置php中输入字段中的第一个值
- 错误:$injector:modulerr模块错误(我的第一个SPA应用程序)
- IE11中的第二个调用取消了第一个Fetch API调用
- Javascript XMLHttpRequest——只有第一个POST请求有效
- 使用javascript或angularjs特定过滤器搜索字符串中第一个img标记的json值
- 将OnClick函数设置为<ul>,最后一个ul是擦除第一个ul-s
- RxJS油门行为;立即获取第一个值
- Angular UI网格:如何通过第一个UI网格中的按钮使第二个UI网格可见
- 选择多个实例中的第一个
- 如何在调用下一个请求之前完成第一个Ajax Get请求
- Lodash:返回对象的第一个键,该对象的值(即数组)中有一个给定的元素(即字符串)
- 看起来第一个console.log是'It’不太对
- 与杜兰达尔合作的第一个JavaScript项目.尝试从第三方 API 获取数据
- 节点发布错误对象的第一个“属性”
- Javascript:表单验证getElementById仅返回第一个id元素
- 仅将 CSS 规则应用于
中的第一个 ,而不分配类/ID - JS在隐藏未定义的值后仅从数组中返回第一个id的值
- 高图表,检测点是否在堆栈中的第一个
- json结果显示第一个值
- 我的设备后退按钮工作不正常,它转到第一个html,但返回到第二个html