过滤RegEx模式

时间:2015-12-10 14:11:59

标签: javascript regex

我开始使用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>

1 个答案:

答案 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)。