我开始使用Chrome扩展程序,在用户访问网页时将链接放在某些表达式上。这是我到目前为止使用的代码。
var input = document.body.innerHTML;
var pattern = /(?!<a[^>]*?>)(\s|>)(\.(gitignore|travis\.yml)|package\.json)(?![^<]*?<\/a>)\b/gm;
document.body.innerHTML = input.replace(pattern,"$1<a href='$2.html'>$2</a>");
链接文件是我正在处理的文档项目的一部分。由于我想避免使用隐藏文件(例如.gitignore.html
),我希望在$2
中过滤实际链接中的点,但在链接文本中保留完整表达。
结果应如下所示:
<a href="gitignore.html">.gitignore</a>
答案 0 :(得分:0)
您可以提出以下正则表达式:
var input = document.body.innerHTML;
var regex = /<a\s+(?!href=\"(?:gitignore|htaccess|htpasswd)\.html\")[^>]*?>(?:\.(gitignore|htpasswd|htaccess))<\/a>/gm;
var output = input.replace(regex,"<a href='$1.html'>.$1</a>");
在此处查看有效的演示:https://regex101.com/r/aT7tA3/2
<强>提示强>:
它不保留任何类,属性,rels。如果您需要这些,请考虑使用解析器或体面的JS库(例如jQuery)。