RegEx帮助替换部分url(Notepad ++)

时间:2014-12-23 18:30:36

标签: regex url replace

我的文件中有类似(类似)的文字:

<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> ]

完全删除第一行(链接)?

我做错了什么?更重要的是,它是如何正确完成的?

谢谢!

2 个答案:

答案 0 :(得分:2)

你的正则表达式是贪婪的(*没有?)因此它匹配所有内容,即使在.pdf之后也是如此。为了使它不贪婪:

<a href="\/abc123\/handouts\/files\/.*?"

将匹配引号内的所有内容,但不包括最终引用。 然后替换为:

<a href="/abc123/handouts/files/xxxxxxx"

这是regex101供您查看:https://regex101.com/r/oY8pI8/2

答案 1 :(得分:0)

用于字符串替换的Javascript版本。

&#13;
&#13;
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;
&#13;
&#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 - 尾随目录和路径匹配