使用特定属性提取HTML标记的内容

时间:2017-06-09 20:09:23

标签: html node.js regex

使用正则表达式,我需要提取标签的多行内容,该内容具有特定的id值。我怎么能这样做?

这就是我目前所拥有的:

eval

这个问题就是这个样本:

<div(.|\n)*?id="${value}"(.|\n)*?>(.|\n)*?<\/div>

如果我想使用此正则表达式替换<div id="1">test</div><div id="2">test</div> (使用id="2"),则整个字符串将匹配。这是因为从标签打开到关闭,我匹配所有内容,直到找到id,这是错误的。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

一种相当简单的方法是使用

原始:<div(?=\s)[^>]*?\sid="2"[^>]*?>([\S\s]*?)</div>

分隔:/<div(?=\s)[^>]*?\sid="2"[^>]*?>([\S\s]*?)<\/div>/

使用变量代替2

内容将在第1组中。

答案 1 :(得分:0)

(.|\n)更改为[^>],以便它不会与结束标记的>匹配。然后它不能匹配不同的div。

<div\b[^>]*\bid="${value}"[^>]*>.*?<\/div>

此外,不要使用(.|\n)*匹配多行,而是使用正则表达式的s修饰符。这使.匹配任何字符,包括换行符。

但是,使用正则表达式解析HTML并不是很强大。你应该使用DOM解析器。