如何过滤特定标签内的匹配?

时间:2011-10-11 18:11:49

标签: javascript regex autocorrect

我正在尝试替换使用TinyMCE增强的输入字段中文本的所有出现次数,每次用户按空格键时都会发生这种情况(类似于Word中的自动更正功能)。

我遇到的问题是当被替换的字符串包含触发器时,它会一次又一次地替换它。 例如,用“

”替换“hello”
<span class="replaced">hello world</span>

它将再次替换为

<span class="replaced"><span class="replaced">hello world</span> world</span>

所以我必须写一个正则表达式来过滤掉已经被替换的文本中的匹配。

你可以帮帮我吗?

这是我目前的代码:

for (r in autocorrect_replacements) {
  if (newHtml.indexOf(autocorrect_replacements[r][0]) > -1) {
    replacement_html = '<span class="replaced">'+autocorrect_replacements[r][1] + '</span>';
    newHtml = newHtml.replace(autocorrect_replacements[r][0],replacement_html);
    ed.setContent(newHtml);
}

我不是正则表达式的粉丝,但我认为在这种情况下这是正确的解决方案。

1 个答案:

答案 0 :(得分:0)

获得跨度的正则表达式为/<span class="replaced">.*<\/span>/。不确定它是否是正确的解决方案。

您可以这样做:

for (r in autocorrect_replacements) {
  if (newHtml.indexOf(autocorrect_replacements[r][0]) > -1) {
        if (!(/<span class="replaced">.*<\/span>/.test(autocorrect_replacements[r][1]))){
            replacement_html = '<span class="replaced">'+autocorrect_replacements[r][1] + '</span>';
            newHtml = newHtml.replace(autocorrect_replacements[r][0],replacement_html);
            ed.setContent(newHtml);
        }
}