我想从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