我正在尝试编写一个从链接和图像中删除文件路径的正则表达式。
href="path/path/file" to href="file"
href="/file" to href="file"
src="/path/file" to src="file"
and so on...
我认为我有它工作,但如果它正在处理的字符串中有两个路径,它就会混乱。我觉得我的表情太贪心了。它找到整个字符串中的最后一个文件。
这是我的代码,显示了在测试输入上搞乱的表达式:
<script type="text/javascript" src="/javascripts/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var s = '<a href="one/keepthis"><img src="/one/two/keep.this"></a>';
var t = s.replace(/(src|href)=("|').*\/(.*)\2/gi,"$1=$2$3$2");
alert(t);
});
</script>
它给出了输出:
<a href="keep.this"></a>
正确的输出应该是:
<a href="keepthis"><img src="keep.this"></a>
感谢您的任何提示!
答案 0 :(得分:0)
我建议运行单独的正则表达式替换,一个用于链接,另一个用于img,更容易和更清晰,因此更易于维护。
答案 1 :(得分:0)
这似乎适用于其他人有问题:
var t = s.replace(/(src|href)=('|")([^ \2]*\/)*\/?([^ \2]*)\2/gi,"$1=$2$4$2");
答案 2 :(得分:0)
尝试添加?
以使*
量词非贪婪。您希望它们在遇到结束引号字符时停止匹配。如果在字符串后面有另一个引用,那么贪婪的版本将会在结束引用之后立即敲响,找到最长的匹配;非贪婪的人会发现最短的可能匹配。
/(src|href)=("|').*?\/([^/]*?)\2/gi
此外,我将第二个.*
更改为[^/]*
,以允许第一个.*
仍然匹配完整路径,因为它非贪婪。
答案 3 :(得分:0)
它不必是正则表达式(假设/
分隔符):
var fileName = url.split('/').pop(); //pop takes the last element