我想從RSS中的字符串中提取多個元素。 由於內容字段包含CDATA我intrested在貌似元件:正則表達式 - 在一行中提取多個元素
<li>item 1</li><li>item 2</li><li>item 3</li>
問題是,串出現在一個行,以便 <li>(.+?)<\/li>
都在一個組中的3個元素相匹配。我需要提取html標籤之間的每個項目,並使情況變得更糟糕,每個artcle的元素數量從1到5不等。有什麼方法可以根據需要動態創建多個組?
我想從RSS中的字符串中提取多個元素。 由於內容字段包含CDATA我intrested在貌似元件:正則表達式 - 在一行中提取多個元素
<li>item 1</li><li>item 2</li><li>item 3</li>
問題是,串出現在一個行,以便 <li>(.+?)<\/li>
都在一個組中的3個元素相匹配。我需要提取html標籤之間的每個項目,並使情況變得更糟糕,每個artcle的元素數量從1到5不等。有什麼方法可以根據需要動態創建多個組?
您可以使用正則表達式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);
您可以使用正則表達式來獲得塊或沒有阻止您的代碼,但似乎你正在做一些「複雜的解析」的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);
});
請出示您有相關的代碼。 – trincot