我正在尝试从RSS中的字符串中提取多个元素。 因为内容字段包含CDATA,我感兴趣的元素如下:
<li>item 1</li><li>item 2</li><li>item 3</li>
问题是,字符串出现在一行中
<li>(.+?)<\/li>
匹配一个组中的所有3个元素。我需要在html标签之间提取每个项目,并使每个artcle中的元素数量从1到5变得更糟。有没有办法动态创建所需数量的组?
答案 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功能:
g
&#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);
});