除了<p>标签-javascript </p>之外,我怎样才能获得所有“p”

时间:2013-09-02 14:55:34

标签: javascript regex replace

我正在尝试用x替换所有“p”。

var re = new RegExp("p","g");
    document.body.innerHTML=document.body.innerHTML.replace(re, "x");

但是这段代码行用x替换所有“p”字母和段落标记。

在:

p and <p>

后:

x and <x>

如何只替换p个字母(不是标签)?

3 个答案:

答案 0 :(得分:2)

regex中尝试完全匹配

var re = new RegExp(/^p$/,"g")

答案 1 :(得分:1)

试试这个:

var re = new RegExp(/(?<!<)p(?!>)/,"g");

谨防</p>

另外,如果你想考虑所有<p class...标签,你应该使用更复杂的正则表达式。

答案 2 :(得分:1)

根据this question的答案,你可以使用这样的代码获取文档中的所有文本节点,然后迭代它们并更改它们的值:

window.onload = function() {
    var walker = document.createTreeWalker(
        document.body, 
        NodeFilter.SHOW_TEXT, 
        null, 
        false
    );

    var node;
    var textNodes = [];

    while(node = walker.nextNode()) {
        textNodes.push(node);
    }

    var regex = new RegExp("p","g");
    for (var i = 0; i < textNodes.length; i++) {
        var node = textNodes[i];
        node.nodeValue = node.nodeValue.replace(regex, "x");
    }
};

Live test case

从我所看到的,它得到了所有现代浏览器甚至IE9的支持。