在javascript中删除和提取文本

时间:2011-11-03 19:06:58

标签: javascript regex

我想尽可能高效地在JavaScript中执行以下操作:

  1. 从字符串中删除<ul></ul>标记及其间的所有内容。
  2. 对于剩下的内容,<li></li>中包含的每个字符串都要转储到数组中,最后没有任何换行符。
  3. 我认为正则表达式是答案,但我以前从未使用过它们。猜猜我可以找到一种方法,但最终它可能不是最有效的。

1 个答案:

答案 0 :(得分:0)

正如其他人所说,你必须小心使用正则表达式解析HTML。如果HTML受到控制且其中没有嵌套的ulli标记,并且没有包含有效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/