正则表达式 - 在一行中提取多个元素

时间:2017-05-27 13:54:33

标签: javascript regex

我正在尝试从RSS中的字符串中提取多个元素。 因为内容字段包含CDATA,我感兴趣的元素如下:

<li>item 1</li><li>item 2</li><li>item 3</li>

问题是,字符串出现在一行中 <li>(.+?)<\/li>匹配一个组中的所有3个元素。我需要在html标签之间提取每个项目,并使每个artcle中的元素数量从1到5变得更糟。有没有办法动态创建所需数量的组?

2 个答案:

答案 0 :(得分:0)

您可以使用正则表达式<figure class="media-landscape has-caption full-width lead"> <span class="image-and-copyright-container"> <img class="js-image-replace" alt="corby" src="http://url.com/jpg" width="820" height="617" data-highest-encountered-width="950"> <span class="off-screen">Photo by</span> <span class="story-image-copyright">AFP</span> </span> <figcaption class="media-caption"> <span class="off-screen">Image caption</span> <span class="media-caption__text"> Text.................. </span> </figcaption> </figure> 修饰符来获取数组中的所有匹配项。但实际上,要解析HTML,您不应该使用正则表达式。使用浏览器上下文中提供的DOM功能:

&#13;
&#13;
g
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以使用正则表达式来获取块中的代码或不使用块中的代码,但您似乎正在对HTML进行“精心解析”。

在这些情况下,HTML解析可能比使用正则表达式操纵字符串更好。 顺便说一句,您可以使用正则表达式查看以下示例,以便在块中或单个元素中实现元素:

var pattern = /<ul><li>(.*?)<\/li><\/ul>/g;
var string = "<ul><li>item 1</li><li>item 2</li><li>item 3</li></ul><ul><li>item 4</li><li>item 5</li></ul>";
var blockContent;
string.match(pattern).forEach(function(el) {
	blockContent = el.replace(/<ul>|<li>|<\/ul>|<\/li>/gi, '');
  console.log(blockContent);
});
var content;
string.match(pattern).forEach(function(el) {
	content = el.replace(/<ul>|<li>|<\/ul>/gi, '');
  content = content.split('</li>');
  content.length = content.length - 1;
  console.log(content);
});