正则表达式JavaScript问题
我有以下案文:正则表达式JavaScript问题,javascript,regex,Javascript,Regex,我有以下案文: <body> <span class="Forum"><div align="center"></div></span><br /> <span class="Topic">Text</span><br /> <hr /> <b>Text</b> Text<br /> <hr width=95%
<body>
<span class="Forum"><div align="center"></div></span><br />
<span class="Topic">Text</span><br />
<hr />
<b>Text</b> Text<br />
<hr width=95% class="sep"/>
Text<a href="Text" target="_blank">Text</a>
<hr />
<b>Text</b> -Text<br />
<hr width=95% class="sep"/>
**Text what i need.**
<hr />
文本
文本文本
文本-文本
还有我的正则表达式,用于“我需要的文本”-/“sep”(*)hr/m
这是错误的:为什么?
与JavaScript正则表达式中的换行符不匹配。尝试:
/"sep"([\s\S]*)hr/m
在我看来,使用另一种方法要好得多,regex不适合从HTML中提取数据。更好的方法是创建一个div,将元素的innerHTML属性设置为您拥有的HTML字符串,然后使用DOM遍历查找您需要的文本节点
这里有一个例子来说明我的意思:。它使用以下代码获取文本:
var div = document.createElement("div");
div.innerHTML = html;
var hrs = div.getElementsByTagName("hr");
for (var i = 0; i < hrs.length; i++) {
if (hrs[i].className == "sep") {
document.body.innerHTML = hrs[i].nextSibling.nodeValue;
break;
}
}
var div=document.createElement(“div”);
div.innerHTML=html;
var hrs=div.getElementsByTagName(“hr”);
对于(变量i=0;i
编辑:比我的要严格一点,在其他类中检查“sep”类,并确保下面的节点是文本节点。不要使用正则表达式,而是使用DOM方法:
var elems = document.getElementByTagName("hr");
for (var i=0; i<elems.length; ++i) {
var elem = elems[i];
if (/(?:^|\s+)sep(?:\s|$)/.test(elem.className) &&
elem.nextSibling && elem.nextSibling.nodeType === Node.TEXT_NODE) {
var text = elems.nextSibling.nodeValue;
break;
}
}
var elems=document.getElementByTagName(“hr”);
对于(var i=0;i您是否也需要第一个文本部分和锚定标记?节点。文本节点
不会在IE中定义,但它是一个映射到数字3的常量,因此您可以使用节点类型===3
。