以下是一些基本的HTML:
<p>Here is a reference: AB-AAA111</p>
<p>Here is a reference: AB-BBB222</p>
<p>Here is a reference: AB-CCC333, AB-DDD444</p>
<p>Here is a reference: AB-EEE555</p>
如您所见,每个段落都包含一个以AB-开头的引用-
最终目标:在Geasemonkey中使用JS / jQuery,使每个AB-参考都可单击。例如:
<p>Here is a reference: <a href="localhost/AAA111"> AB-AAA111 </a> </p>
我知道如何使用Regex来挑选以AB- / AB- \ w + / gi开头的单词,并且我知道如何分配变量并替换字符串的特定部分。
在这种情况下,我不知道怎么缝在一起?
答案 0 :(得分:0)
如果您真的想通过一个简单的正则表达式来做到这一点,则可以使用以下代码:
document.body.innerHTML = document.body.innerHTML
.replace(/\bAB-(\w+)/g, '<a href="http://localhost/$1">$&</a>');
但是,请注意,仅替换HTML文档中的字符串始终是一个非常糟糕的主意。想象一下,例如可能有一些类名,例如<div class="AB-123" id="abc">
。这种方法会破坏整个站点。不要在您无法控制的网站上使用它。
相反,请尝试仅解析文本节点。 document
为您提供了在特定节点上工作的evaluate
方法。您也可以搜索所有文本节点,例如:
let nodes = document.evaluate('//text()[contains(.,"AB-")]', document,
null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
这将为您提供可以由nodes.iterateNext()
进行迭代的节点列表。缺点是解析AB-<b>123</b>
之类的超文本变得非常困难。
答案 1 :(得分:-1)
您实际上不需要使用正则表达式
inputs = document.getElementsByTagName('p');
for(var i = 0; i < inputs.length; i++) {
var p = inputs[i].innerHTML.substring(21);
if(p.startsWith("AB")) {
inputs[i].innerHTML = "<a href='*'>" + p;
inputs[i].innerHTML += "</a>";
}
}
只需修剪不包含AB ...序列的字符串的开头部分。之后,您需要做的就是检查开头是否以AB开头并修改这些元素的innerHTML。
如果您想在该部分使用正则表达式,请使用类似的
var re = new RegExp("^AB");
var match = re.test("AB");
查看它是否以该序列开头。
我敢肯定,可以在这些项目上添加标签的方法更为精细,但这很简单而且可行。
希望这会有所帮助,欢呼