我想尽可能高效地在JavaScript中执行以下操作:
<ul></ul>
标记及其间的所有内容。<li>
和</li>
中包含的每个字符串都要转储到数组中,最后没有任何换行符。我认为正则表达式是答案,但我以前从未使用过它们。猜猜我可以找到一种方法,但最终它可能不是最有效的。
答案 0 :(得分:0)
正如其他人所说,你必须小心使用正则表达式解析HTML。如果HTML受到控制且其中没有嵌套的ul
或li
标记,并且没有包含有效HTML标记或&lt;或者&gt; chars(例如,HTML来自已知格式的已知来源,它可以正常工作)。这是我认为你要求做的一种方式:
function parseList(str) {
var output = [], matches;
var re = /<\s*li[^>]*>(.*?)<\/li>/gi;
// remove newlines
str = str.replace(/\n|\r/igm, "");
// get text between ul tags
matches = str.match(/<\s*ul[^>]*>(.*?)<\/ul\s*>/);
if (matches) {
str = matches[1];
// get text between each li tag
while (matches = re.exec(str)) {
output.push(matches[1]);
}
}
return(output);
}
使用理解格式更精细点的实际HTML解析器(如嵌套标记,嵌入字符串中的标记值等)更加万无一失,但如果你没有这个,那么更简单的解析器就像这可以用。
您可以在此处查看:http://jsfiddle.net/jfriend00/c9ZLT/