我的文件中有类似(类似)的文字:
<td>
[<a href="/abc123/handouts/files/directory1/somename.pdf" target="_blank">Slides</a> ] [ [<a href="/abc123/handouts/files/directory2/somename2.pdf" target="_blank">Handout</a> ]</td>
<td>
[<a href="/abc123/handouts/files/directory3/somename343.pdf" target="_blank">Slides</a> ] [ <a href="/abc123/handouts/files/directory5/somename2324.pdf" target="_blank">Handout</a> ]
</td>
“/ abc123 / handouts / files /”文本之后的所有内容都不同(目录和.pdf名称)
我似乎无法完全弄清楚如何用“XXXXXXX”替换JUST“directory3 / somename343.pdf”部分
我的尝试没有产生任何结果,或者在第一场比赛后删除了剩下的线?
我的尝试:
搜索:
<a href="/abc123/handouts/files/.*."
替换为:
<a href="/abc123/handouts/files/xxxxxxx"
告诉我:
[ <a href="/abc123/handouts/files/xxxxxxx">Handout</a> ]
完全删除第一行(链接)?
我做错了什么?更重要的是,它是如何正确完成的?
谢谢!
答案 0 :(得分:2)
你的正则表达式是贪婪的(*
没有?
)因此它匹配所有内容,即使在.pdf之后也是如此。为了使它不贪婪:
<a href="\/abc123\/handouts\/files\/.*?"
将匹配引号内的所有内容,但不包括最终引用。 然后替换为:
<a href="/abc123/handouts/files/xxxxxxx"
这是regex101供您查看:https://regex101.com/r/oY8pI8/2
答案 1 :(得分:0)
用于字符串替换的Javascript版本。
var re = /"(\/abc123\/handouts\/files\/)((?:[a-zA-Z0-9]*\/)*[a-zA-Z]*.[A-ZA-z]{3,4})"/;
var str = '"/abc123/handouts/files/directory1/somename.pdf"';
var newstr = str.replace(re, '"$1XXXXX"');
alert(newstr);
&#13;
本质上,上述代码分为3部分。 初步抓住
"(/abc123/handouts/files/)
非捕获组以查找更多文件夹
(?:[a-zA-Z0-9]*\/)*
特定文件格式
[a-zA-Z]*.[A-ZA-z]{3,4}
注意到最终的文件夹和文档格式在一个组中包装在一起
((?:[a-zA-Z0-9]*\/)*[a-zA-Z]*.[A-ZA-z]{3,4})
因此将按如下方式命令捕获 0 - 完整匹配 1 - 初始文件夹匹配 2 - 尾随目录和路径匹配