Javascript 正则表达式-如何查找未包含在html标记中或它们之间的单词

Javascript 正则表达式-如何查找未包含在html标记中或它们之间的单词,javascript,html,regex,tags,Javascript,Html,Regex,Tags,我想在html字符串中找到匹配项 这不会出现在html标记之间或它们内部 例如: 这个词是:ue UESDFSD 因此,我只想找到第三个匹配项(不在“蓝色”内),而不是span标记之间的匹配项 谢谢。HTML不是一个,所以不能被解析。HTML不是一个,所以不能被解析。由于您在浏览器中有很好的DOM操作可能性,您可以利用它。您可以创建新元素,将字符串设置为内容,并在所有文本节点上迭代: var tmp = document.createElement('div'); tmp.innerHTML =

我想在html字符串中找到匹配项

这不会出现在html标记之间或它们内部

例如:

这个词是:
ue

UESDFSD

因此,我只想找到第三个匹配项(不在“蓝色”内),而不是
span
标记之间的匹配项


谢谢。

HTML不是一个,所以不能被解析。

HTML不是一个,所以不能被解析。

由于您在浏览器中有很好的DOM操作可能性,您可以利用它。您可以创建新元素,将字符串设置为内容,并在所有文本节点上迭代:

var tmp = document.createElement('div');
tmp.innerHTML = htmlString;

var matches = [],
    children = tmp.childNodes,
    node,
    word = ' ' + word + ' ';

for(var i = children.length; i--; ) {
    node = children[i];
    if(node.nodeType === 3 && (' ' + node.nodeValue + ' ').indexOf(word) > -1) {
        matches.push(node);
    }
}

由于您在浏览器中有很好的DOM操作可能性,因此可以利用这一点。您可以创建新元素,将字符串设置为内容,并在所有文本节点上迭代:

var tmp = document.createElement('div');
tmp.innerHTML = htmlString;

var matches = [],
    children = tmp.childNodes,
    node,
    word = ' ' + word + ' ';

for(var i = children.length; i--; ) {
    node = children[i];
    if(node.nodeType === 3 && (' ' + node.nodeValue + ' ').indexOf(word) > -1) {
        matches.push(node);
    }
}

您正在尝试使用正则表达式来解析HTML。HTML本身不能用正则表达式轻松、可靠地处理

如果在浏览器上执行此操作,则可以使用浏览器的高度优化的HTML解析器

如果要在中间有标记时检测单词(例如,“u
e”):

var元素、节点、topLevelText;
element=document.createElement('div');
element.innerHTML=“uesdfsd”;
topLevelText=“”;
for(node=element.firstChild;node;node=node.nextSibling){
如果(node.nodeType==3){//3=文本节点
topLevelText+=node.nodeValue;
}
}
if(topLevelText.indexOf(word)>=0){
//发现
}
如果您只想在事物之间检测它(因此,您的示例不是“u
e”):

var元素,节点;
element=document.createElement('div');
element.innerHTML=“uesdfsd”;
for(node=element.firstChild;node;node=node.nextSibling){
如果(node.nodeType==3){//3=文本节点
if(node.nodeValue.indexOf(word)>=0){
//发现
}
}
}
(两者都进行区分大小写的匹配。)

就是这样

  • 使用创建不在任何位置显示的元素
  • 通过将HTML文本指定给元素上的
    innerHTML
    ,解析HTML文本。这个属性最近才被标准化,但它已经被所有主流浏览器支持了十年左右
  • 查看节点的直接子节点,其中包括通过解析创建的任何元素,以及字符串中顶级文本的文本节点(例如,要搜索它的位置的文本)。这是使用、和
  • 根据您是否希望在“u
    e”情况下找到它,它要么直接查看每个文本节点中的文本,要么将它们全部构建成一个字符串,然后进行搜索
  • 上面的链接大多指向,大多数浏览器都支持这些链接。其他方便的参考资料:

    • (特定于HTML的DOM内容)
    • (更新的DOM内容)

      • 您正在尝试使用正则表达式解析HTML。HTML本身不能用正则表达式轻松、可靠地处理

        如果在浏览器上执行此操作,则可以使用浏览器的高度优化的HTML解析器

        如果要在中间有标记时检测单词(例如,“u
        e”):

        var元素、节点、topLevelText;
        element=document.createElement('div');
        element.innerHTML=“uesdfsd”;
        topLevelText=“”;
        for(node=element.firstChild;node;node=node.nextSibling){
        如果(node.nodeType==3){//3=文本节点
        topLevelText+=node.nodeValue;
        }
        }
        if(topLevelText.indexOf(word)>=0){
        //发现
        }
        
        如果您只想在事物之间检测它(因此,您的示例不是“u
        e”):

        var元素,节点;
        element=document.createElement('div');
        element.innerHTML=“uesdfsd”;
        for(node=element.firstChild;node;node=node.nextSibling){
        如果(node.nodeType==3){//3=文本节点
        if(node.nodeValue.indexOf(word)>=0){
        //发现
        }
        }
        }
        
        (两者都进行区分大小写的匹配。)

        就是这样

      • 使用创建不在任何位置显示的元素
      • 通过将HTML文本指定给元素上的
        innerHTML
        ,解析HTML文本。这个属性最近才被标准化,但它已经被所有主流浏览器支持了十年左右
      • 查看节点的直接子节点,其中包括通过解析创建的任何元素,以及字符串中顶级文本的文本节点(例如,要搜索它的位置的文本)。这是使用、和
      • 根据您是否希望在“u
        e”情况下找到它,它要么直接查看每个文本节点中的文本,要么将它们全部构建成一个字符串,然后进行搜索
      • 上面的链接大多指向,大多数浏览器都支持这些链接。其他方便的参考资料:

        • (特定于HTML的DOM内容)
        • (更新的DOM内容)

        假设您处理的是一段HTML(而不是一个完整的文档),您可以编写一个正则表达式来匹配大多数格式良好的最内层非嵌套元素,然后递归应用此正则表达式以删除所有标记的材料,在标记之间留下所需的非标记材料。这里就是这样一个正则表达式(在注释的PHP/PCRE'x语法中),它匹配大多数空的、非空的、非嵌套的、非短标记的HTML元素

        $re_html='%#匹配非嵌套、非短标记html空元素和非空元素。
        
        <#Opening tag Opening“|>([^假设您处理的是HTML片段(而不是完整的文档),您可以编写一个正则表达式来匹配最内部的、格式良好的非嵌套元素,然后递归地应用此正则表达式以删除所有标记的材质,从而留下所需的非标记材质
        var element, node;
        element = document.createElement('div');
        element.innerHTML = "<span color=blue>ue</span>ue<span>sdfsd</span>";
        for (node = element.firstChild; node; node = node.nextSibling) {
            if (node.nodeType === 3) { // 3 = text node
                if (node.nodeValue.indexOf(word) >= 0) {
                    // Found
                }
            }
        }