Javascript 正则表达式-如何查找未包含在html标记中或它们之间的单词
我想在html字符串中找到匹配项 这不会出现在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 =
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){
//发现
}
如果您只想在事物之间检测它(因此,您的示例不是“ue”):
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){
//发现
}
}
}
(两者都进行区分大小写的匹配。)
就是这样
innerHTML
,解析HTML文本。这个属性最近才被标准化,但它已经被所有主流浏览器支持了十年左右e”情况下找到它,它要么直接查看每个文本节点中的文本,要么将它们全部构建成一个字符串,然后进行搜索
- (特定于HTML的DOM内容)
- (更新的DOM内容)
- 使用创建不在任何位置显示的元素
- 通过将HTML文本指定给元素上的
,解析HTML文本。这个属性最近才被标准化,但它已经被所有主流浏览器支持了十年左右innerHTML
- 查看节点的直接子节点,其中包括通过解析创建的任何元素,以及字符串中顶级文本的文本节点(例如,要搜索它的位置的文本)。这是使用、和
- 根据您是否希望在“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){
//发现
}
如果您只想在事物之间检测它(因此,您的示例不是“ue”):
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){
//发现
}
}
}
(两者都进行区分大小写的匹配。)
就是这样
$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
}
}
}