2017-05-27 43 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); 
 
});