Javascript 正则表达式问题-HTML标记内容

Javascript 正则表达式问题-HTML标记内容,javascript,regex,Javascript,Regex,我想用JavaScript将中的所有“I”字符替换为“I”。 (例如:Hi!it!应更改为Hi!it!)。 我知道我必须使用正则表达式。但我不知道该写什么。 你能帮助我吗? 谢谢。我刚才回答了一个类似的问题,可能会对您有所帮助: 对于这种特殊情况,您可以简化 更新 我添加了一个filter参数,允许您过滤掉特定节点的后代。这应该是一个接受单个DOM节点参数并返回布尔值的函数:true替换节点及其子体中的文本,以及false忽略节点及其子体 function replaceText(node, r

我想用JavaScript将
中的所有“I”字符替换为“I”。 (例如:
Hi!it!
应更改为
Hi!it!
)。 我知道我必须使用正则表达式。但我不知道该写什么。 你能帮助我吗?
谢谢。

我刚才回答了一个类似的问题,可能会对您有所帮助:

对于这种特殊情况,您可以简化

更新

我添加了一个
filter
参数,允许您过滤掉特定节点的后代。这应该是一个接受单个DOM节点参数并返回布尔值的函数:
true
替换节点及其子体中的文本,以及
false
忽略节点及其子体

function replaceText(node, regex, replacementText, filter) {
    if (node.nodeType == 3) {
        node.data = node.data.replace(regex, replacementText);
    } else if (!filter || filter(node)) {
        var child = node.firstChild;
        while (child) {
            replaceText(child, regex, replacementText, filter);
            child = child.nextSibling;
        }
    }
}

function scriptAndStyleFilter(node) {
    return node.nodeType != 1 || !/SCRIPT|STYLE/i.test(node.nodeName);
}

replaceText(document.body, /i/g, "I", scriptAndStyleFilter);

我刚才回答了一个类似的问题,可能会对你有所帮助:

对于这种特殊情况,您可以简化

更新

我添加了一个
filter
参数,允许您过滤掉特定节点的后代。这应该是一个接受单个DOM节点参数并返回布尔值的函数:
true
替换节点及其子体中的文本,以及
false
忽略节点及其子体

function replaceText(node, regex, replacementText, filter) {
    if (node.nodeType == 3) {
        node.data = node.data.replace(regex, replacementText);
    } else if (!filter || filter(node)) {
        var child = node.firstChild;
        while (child) {
            replaceText(child, regex, replacementText, filter);
            child = child.nextSibling;
        }
    }
}

function scriptAndStyleFilter(node) {
    return node.nodeType != 1 || !/SCRIPT|STYLE/i.test(node.nodeName);
}

replaceText(document.body, /i/g, "I", scriptAndStyleFilter);

这里有一个替代方案,使用CSS、jQuery和

CSS:

JavaScript:

$('body').highlight('i');
工作示例:


这是一个简单的示例,但是您可以使用源代码获得所需的内容,以防需要更复杂的内容。在正文的源代码上使用正则表达式是错误的,特别是在浏览器的上下文中,您已经有了解析的DOM结构。

这里有一个替代方法,使用CSS、jQuery和:

CSS:

JavaScript:

$('body').highlight('i');
工作示例:


这是一个简单的示例,但是您可以使用源代码获得所需的内容,以防需要更复杂的内容。在你身体的源代码上使用正则表达式是错误的,特别是在浏览器的上下文中,你已经有了一个解析的DOM结构。

你到底为什么要这样做?你怎么知道你“必须”使用正则表达式?因为我想用“I”替换“I”,只在内容中,而不是在标记中……如果是HTML/XML,不要使用正则表达式。当然Stackoverflow会告诉你们为什么。@darioo:我开始明白你们的观点(和厌倦)。你们到底为什么要这么做?你们怎么知道你们“必须”使用正则表达式?因为我想用“I”代替“I”,只在内容中,而不在标记中……如果是HTML/XML,就不要使用正则表达式。我会告诉你们原因的。@darioo:我开始明白你们的意思(和厌倦)。@kikio-我就这么做了,就在几分钟内。插件允许你排除某些元素,如果你需要的话。这里的正则表达式很难,或者根本不可能。@kikio-我就是这么做的,而且只花了几分钟。插件允许你排除某些元素,如果你需要的话。这里的正则表达式很难,或者根本不可能。谢谢。。。你的功能很棒!但如何才能过滤,标签?这意味着停止替换这些标签内容。@kikio:它到底有什么问题?顺便说一句,
元素在HTML文档的
元素中无效(即使它在大多数浏览器中都能工作)。我在那页上写道:
#myid{font-family:tahoma}嗨!它
我想把它改成这样:
#myid{font-family:tahoma}嗨!它(所有内容不得更改)对。。。这就是所发生的。(使用新代码):
#myId{font-famIly:tahoma}嗨!它谢谢。。。你的功能很棒!但如何才能过滤,标签?这意味着停止替换这些标签内容。@kikio:它到底有什么问题?顺便说一句,
元素在HTML文档的
元素中无效(即使它在大多数浏览器中都能工作)。我在那页上写道:
#myid{font-family:tahoma}嗨!它
我想把它改成这样:
#myid{font-family:tahoma}嗨!它(所有内容不得更改)对。。。这就是所发生的。(使用新代码):
#myId{font-famIly:tahoma}嗨!它