我需要一个与“myword”匹配的正则表达式,它不在锚标记之间。任何东西,包括其他标签,如:
<strong>,</strong>,<span>,</span>,etc.
我有一个有效的正则表达式,但如果锚标签之间还有其他标签,则无效。
这是我的正则表达式:
(?!<a[^>]*?>)(\bmyword\b)(?![^<]*?</a>)
示例文字:
<a href="xxxx">Lore ipsum <span> lore myword </span></a> Lore <b>myword</b>ipsum myword.
我只需要第二个和第三个“myword”mached。不是第一个。
你能帮我吗?
答案 0 :(得分:0)
这是针对您的问题的JavaScript解决方案。您可能需要根据所需的浏览器兼容性进行修改(textContent
是IE9 +,如果您支持较旧的浏览器,则可能需要使用innerHTML
),但它应该可以帮助您。
使用DOM对象是一种更加可靠的方法,因为HTML不是常规语言。
您在评论中提到,这些都包含在p
中。我还添加了嵌套在另一个标记中的a
标记。
<p id="foo"><a href="xxxx">Lore ipsum <span> lore myword </span></a> Lore <b>myword</b>ipsum myword. <i><a href="xxxx">myword</a></i></p>
使用Javascript:
function replaceMyWord(parent) {
var i;
for (i = 0; i < parent.childNodes.length; i += 1) {
node = parent.childNodes[i];
if (node.nodeName !== 'A') {
if (node.childNodes.length > 0) {
replaceMyWord(node);
} else {
node.textContent = node.textContent.replace(/myword/g, 'replacement');
}
}
}
}
replaceMyWord(document.getElementById('foo'));