javascript - 匹配没有标签内容的 HTML 文本

标签 javascript html regex

我正在寻找用于 Javascript 的正则表达式来搜索 HTML 中的文本(例如“span”)。

例子:

<div>Lorem span Ipsum dor<a href="blabla">lablala</a> dsad <span>2</span> ... </div>

但只有“Lorem”之后的“span”应该被匹配,而不是 <span>标签。
对于第二个示例,如果我们搜索“bla”,则应该只匹配粗体文本。

编辑:

通过innerHTML获取HTML,匹配的会被<span class="x">$text</span>包围,然后重写为该节点的 innerHTML,所有这些都不会杀死其他标签。

EDIT2 和我的解决方案:

我写了自己的搜索,它是一个字符一个字符地搜索,带有缓存和标志。

感谢您的帮助!

最佳答案

您可以使用 dom 方法来处理每个文本节点。

此方法以父节点作为第一个参数并循环遍历其所有子节点, 使用作为第二个参数传递的函数处理文本节点。 该功能是您对测试节点的数据进行操作的地方, 例如,在“突出显示”范围内查找、替换、删除或换行找到的文本。

你可以只用第一个参数调用这个函数,它会返回一个数组 文本节点,然后您可以使用该数组来操作文本 - 这种情况下的数组项是每个节点,并且具有数据、父节点和兄弟节点。

document.deepText= function(hoo, fun){
    var A= [], tem;
    if(hoo){
        hoo= hoo.firstChild;
        while(hoo!= null){
            if(hoo.nodeType== 3){
                if(fun){
                    if((tem= fun(hoo))!== undefined){
                       A[A.length]= tem;
                    }
                }
                else A[A.length]= hoo;
            }
            else A= A.concat(arguments.callee(hoo, fun));
            hoo= hoo.nextSibling;
        }
    }
    return A;
}

//测试用例

function ucwords(pa, rx){
    var f= function(node){
        var t= node.data;
        if(t && t.search(rx)!=-1){
            node.data= t.replace(rx,function(w){return w.toUpperCase()});
            return node;
        }
        return undefined;
    }
    return document.deepText(pa, f);
}

ucwords(document.body,/\bspan\b/ig)

关于javascript - 匹配没有标签内容的 HTML 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/725623/

相关文章:

javascript - 将输入字段添加到 div 容器 (javascript)

javascript - 单击更改类别

html - 以相反的方式使用 CSS 底部属性,可能吗?

javascript - 调整窗口大小时移动图层

javascript - 替换字符串的一个字符

php - 在 Python 中实现 preg_match_all

javascript - 当 Flash 层放置在元素上时保持 CSS 动画

javascript - 创建一个匹配任何包含数字的单词的正则表达式

javascript - javascript 中的 C# TrimEnd() 等效项

regex - Emacs:replace-regexp 替换不改变大小写