解决正则表达式从 html 片段提取多行文本仅捕获最后一行的问题
原始问题:
尝试使用正则表达式从 html 片段中提取文本,目标文本可能有多行,但正则表达式只匹配并捕获了最后一行。如何解决这种问题?
给定的正则表达式:
/^(?:<[pb]>)+((?:w(s)?)+:)(?:</[pb]>)+ ?(?:<p>((?:w+s*[,.:;()]?s*)+)</p> ?)+$/gm
回答:
解决该问题的方法有两个:
- 使用 dom 树工具
正则表达式不适合匹配 html 这种结构严格且高度兼容的文本。推荐使用现成的 dom 树工具来解析 html 并提取文本。
- 自行分解中间组
如果一定要使用正则表达式,请注意,匹配到的中间组并不会自动转换成数组。需要使用额外的代码自行分解中间组以获得预期的结果。