正则表达式替换不在<a (whatever)=""> and (whatever) </a>标记之间的单词

时间:2014-01-15 15:19:58

标签: javascript regex

我需要一个与“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。不是第一个。

你能帮我吗?

1 个答案:

答案 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'));

Fiddle