Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式JavaScript问题_Javascript_Regex - Fatal编程技术网

正则表达式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