2017-05-27 78 views
-1

我想从RSS中的字符串中提取多个元素。 由于内容字段包含CDATA我intrested在貌似元件:正则表达式 - 在一行中提取多个元素

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

问题是,串出现在一个行,以便 <li>(.+?)<\/li>都在一个组中的3个元素相匹配。我需要提取html标签之间的每个项目,并使情况变得更糟糕,每个artcle的元素数量从1到5不等。有什么方法可以根据需要动态创建多个组?

+0

请出示您有相关的代码。 – trincot

回答

0

您可以使用正则表达式g修饰符来获取数组中的所有匹配。但真的,解析HTML你不应该使用正则表达式。使用在浏览器上下文提供的DOM功能:

var span = document.createElement("span"); 
 
span.innerHTML = "<li>item 1</li><li>item 2</li><li>item 3</li>"; 
 
var texts = Array.from(span.querySelectorAll('li'), li => li.textContent); 
 

 
console.log(texts);

+0

谢谢,我今天要试一试。我习惯了工作流中的正则表达式,但是在那个应用程序中,您正在使用已解码的文本。 – Sebastian

+0

你的想法可以在JSFiddle中使用,而我在IFTTT制造商中,所以我需要找到另一种解决方案。 – Sebastian

+0

你的意思是你在node.js上运行? – trincot

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) { 
 
\t blockContent = el.replace(/<ul>|<li>|<\/ul>|<\/li>/gi, ''); 
 
    console.log(blockContent); 
 
}); 
 
var content; 
 
string.match(pattern).forEach(function(el) { 
 
\t content = el.replace(/<ul>|<li>|<\/ul>/gi, ''); 
 
    content = content.split('</li>'); 
 
    content.length = content.length - 1; 
 
    console.log(content); 
 
});