Javascript 如何使用正则表达式将br、p、div标记拆分为数组
我试图将一个html字符串拆分成一个数组,但失败得很惨。下面的代码去掉“”但保留标记名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
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:我不想修改这个答案,因为它是针对另一个问题的。请提出一个新问题,我会在那里回答。