regex 使用正则表达式替换所有的url

83qze16e  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(148)

我正在创建一个解析HTML并替换链接的小东西,我如何使用正则表达式实现这一点?
我以前的方法是类似于this(我现在意识到,我不小心为if语句而不仅仅是上下文创建了一个捕获组,但我仍然卡住了),用于那些不以HTTP标记开头的捕获),然后是一些小的代码操作,但正则表达式似乎不起作用。
我基本上想过滤掉URL并执行https://example.org/?foo=<url>
示例:
(with基本URL example.com

<script src="scripts/something.js"/>
<img href="https://cdn.some_website.com/foo.jpg"/>
<a href="/hello">Hello world!</a>

会变成这样

<script src="https://example.org/?url=https://example.com/scripts/something.js">
<img href="https://example.org/?url=https://cdn.some_website.com/img/foo.jpg"/>
<a href="https://example.org/?url=http://example.org/?url=https://example.com/hello">Hello world!</a>

如果可能的话,我更希望这是所有的正则表达式,但我可能不得不使用代码来处理其中一些更复杂的部分。有人知道一个正则表达式可以在这里工作吗?

zkure5ic

zkure5ic1#

您需要分步骤执行此操作:
1.将相对路径替换为绝对路径:
(src|href)="(?!\/|http|ftp|#) -〉$1="<relative_path_prefix>
替换示例:$1="/,或$1="/root_folder/next_folder/,或。查找正确的相对前缀超出了本问题的范围。您必须在遍历页面时找到它。
1.用完全限定路径替换绝对路径:
(src|href)="(?=\/) -〉$1="<current_domain>
在示例$1="http://example.com
1.将任何链接替换为所需链接:
(src|href)="(?!mailto:|tel:|javascript:|#)(.*?)"" -〉$1="https://example.org?path=$2"
在此之后,到元素的链接(如href='#header'),电子邮件链接和电话链接,以及js触发器将保留在原地,而所有其他的都将被替换,就像你描述的那样。

相关问题