0

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

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

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

前:

p and <p>

后:

x and <x>

我怎样才能只替换 p 字母(不是标签)?

4

3 回答 3

2

尝试精确匹配regex

var re = new RegExp(/^p$/,"g")
于 2013-09-02T14:59:14.983 回答
1

尝试这个:

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

提防</p>

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

于 2013-09-02T15:00:33.487 回答
1

基于这个问题的好答案,您可以使用这样的代码获取文档中的所有文本节点,然后遍历它们并更改它们的值:

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");
    }
};

现场测试用例

据我所知,所有现代浏览器甚至 IE9 都支持它。

于 2013-09-02T15:05:55.623 回答