我正在尝试编写javascript代码来查找div中的所有网址。现在,如果div中的所有url都被空格分隔,这将非常容易,在这种情况下,我可以在div中找到它们的正则表达式。但是,这个外部div中的url可能位于sub divs(或任何其他html标记)中,我也想将subdivs视为分隔符(我不想摆脱这些细分)。举个例子,在下面我想在ID为“外部”的div中找到www.foo.com和www.bar.com:
<div id="outer"><div>www.foo.com</div>www.bar.com</div>
这样做的好方法是什么?
答案 0 :(得分:3)
您可以对所有非文本子节点应用递归调用。
function replaceWwwInNodes(node) {
//text node
if (node.nodeType === 3) {
node.textContent = node.textContent.replace(/* ??? */)
}
else {
Array.prototype.forEach.call(node.childNodes, function (elem) {
replaceWwwInNodes(elem);
});
}
}
replaceWwwInNodes(document.getElementById('outer'));
答案 1 :(得分:0)
尝试使用此示例http://jsfiddle.net/iklementiev/TaCx9/1/
var data = document.getElementById("outer").innerText;
var myRe = /www\.[0-9a-z-]+\.[a-z]{2,4}/igm;
var matches= data.match(myRe)
for (var i = 0; i < matches.length; i++) {
alert('match: ' + matches[i]);
}
这有助于找到所有网址。
答案 2 :(得分:0)
试试这个
var expression = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi;
var regex = new RegExp(expression);
var regContent = $("#outer").html();
var newContent = regContent;
if(regContent.match(regex))
{
var textContent = regContent.match(regex);
for(var i=0;i<regContent.match(regex).length;i++)
{
newContent = newContent.replace(new RegExp(regContent.match(regex)[i], "g"), "test");
}
$("#outer").html(newContent);
}
这将获取所有网址内容并将其替换为“测试”。