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 如何使用正则表达式将br、p、div标记拆分为数组_Javascript_Regex - Fatal编程技术网

Javascript 如何使用正则表达式将br、p、div标记拆分为数组

Javascript 如何使用正则表达式将br、p、div标记拆分为数组,javascript,regex,Javascript,Regex,我试图将一个html字符串拆分成一个数组,但失败得很惨。下面的代码去掉“”但保留标记名 var html = 'line 1 <div>line 2</div> <div>line <span class="underline">3</span></div> <div>line <stong>4</string></div> <p>line <em&g

我试图将一个html字符串拆分成一个数组,但失败得很惨。下面的代码去掉“”但保留标记名

var html = 'line 1
 <div>line 2</div>
 <div>line <span class="underline">3</span></div>
 <div>line <stong>4</string></div>
 <p>line <em>5<em></p>
 <br> line 6
 <br /> line 7
 <br/> line 8
 <img src=""/>'

var val = html.split(/<\/?(div|p|br)[^>]*>/igm)
console.log (val)  // ["↵    line 1↵    ", "div", "line 2", "div", "↵    ", "div", "line <span class="underline">3</span>", "div", "↵    ", "div", "line <strong>4</strong>", "div", "↵    ", "p", "line <em>5</em>", "p", "↵    ", "br", " line 6↵    ", "br", " line 7↵    ", "br", " line 8↵    <img src="">↵"]
var html='第1行
第2行
第3行
第4行
第5行


第6行
第7行
第8行 ' var val=html.split(/]*>/igm) console.log(val)/[”↵ 第1行↵ ", "第2行、第2行、第↵ ", "第3行、第3行、第↵ ", "“div”、“line4”、“div”、“↵ ", "“第5行”、“第5行”↵ ", "br“,”第6行↵ ", "br“,”第7行↵ ", "br“,”第8行↵ ↵"]

有更好的方法吗?我知道我可以使用dom操作,但我更喜欢使用regex,因为它与服务器端js兼容,这是因为您使用了括号,里面的内容被添加到结果中。这不会很好,但是像这样简单的方法怎么样

var val = html.split(/<.+?>/)
var val=html.split(//)

我不建议使用正则表达式来完成此任务。但是查看您的拆分正则表达式,您在使用捕获组时犯了一个错误:

var val = html.split(/<\/?(div|p|br)[^>]*>/igm);
var-val=html.split(/]*>/igm);
将其设置为非捕获,如下所示:

var val = html.split(/<\/?(?:div|p|br)[^>]*>\s*/im);
var-val=html.split(/]*>\s*/im);
原因:大多数Javascript引擎都返回一个分组到分割函数调用的结果数组中的捕获

结果:应用建议的正则表达式后:

["", "line 1", "", "line 2", "", "line <span class='underline'>3</span>", "", "line <stong>4</string>", "", "line <em>5<em>", "", "line 6\n", "line 7\n", "line 8\n<img src=''/>"]
[、“第1行”、“第2行”、“第3行”、“第4行”、“第5行”、“第6行”、“第7行”、“第8行”]

实时演示:根据您所处的平台,服务器端JS也可以操作DOM。看到预期的输出了吗?您不能用正则表达式解析HTML。我很确定您可以在服务器上使用DOM操作强制性的:我希望它没有“div”、“p”和“br”“输出中的字符串。感谢此脚本,但是我可以问一下如何在数组中不包含空值吗?”?从以下位置:[“”、“非空字符串”、“非空字符串”]到此[“非空字符串”、“非空字符串”]。我现在要做的是将它再次插入到一个新数组中,并排除空(“”)。Thanks@blender_noob:我不想修改这个答案,因为它是针对另一个问题的。请提出一个新问题,我会在那里回答。