【问题标题】:using Regex to extract strings from HTML tags使用正则表达式从 HTML 标签中提取字符串
【发布时间】:2014-04-10 06:03:05
【问题描述】:

你好

我正在尝试从下划线模板中获取所有变量,所以在这个字符串中:

 <%=userID %> </td><td><%=username %> </td><td><%=firstname %>

我想要一个数组:

{userID, username,firstname}

一些注意事项:

  1. 我不能假设字符串中有任何空格。

  2. 变量名可以在模板中重复。

  3. html 标签可以变化,这只是一个例子。模板可以基于 's 或其他任何东西。

我尝试了什么

    var regexp = /<%=(.+)%>/;

为什么失败

上面的正则表达式也会得到初始字符串,因为它符合正则表达式的要求。我对正则表达式不太熟悉,恐怕我错过了一些非常简单的东西。

我也知道一般来说用正则表达式解析 HTML 是不好的做法,但是这个具体的例子并不完全是 HTML 解析(在我看来),因为我不需要特定的 html 标记。

提前致谢!

【问题讨论】:

    标签: javascript regex parsing


    【解决方案1】:

    您需要使用括号进行分组并使用字符类来限制匹配的字符。试试:

        var regexp = /<%=([\w\s]+)%>/g;
        var html = "<%=userID %> </td><td><%=username %> </td><td><%=firstname %>";
        var match = [], result = [];
    
        while (match = regexp.exec(html))
            result.push(match[1].trim());
        console.log("Result = " + result);
    
        // Result = userID,username,firstname 
    

    【讨论】:

    • 不幸的是它不起作用,这仅返回第一个变量,在 .exec while 循环中运行它时,它作为无限循环挂起。 (每次迭代都带回完全相同的数据。
    • 您可能正在错误地运行循环。我已经修改了我的答案以包含一个完整的实现。
    • 您的循环可以正常工作,而且一切都很好,我将深入研究该正则表达式并找出它为什么可以正常工作。至于我之前失败的循环,我使用的是 MDN 文档; developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… while ((myArray = myRe.exec(str)) !== null) 删除 null 部分修复了它。非常感谢! :)
    【解决方案2】:

    将您的正则表达式更改为:

    <%=(.+?)%>
    

    ? 是一个惰性匹配器。

    【讨论】:

    • 与下面的答案相同:不幸的是它不起作用,这仅返回第一个变量,在 .exec while 循环中运行它时,它作为无限循环挂起。 (每次迭代都带回完全相同的数据。
    猜你喜欢
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 2021-01-17
    • 2014-10-17
    • 2018-05-08
    • 1970-01-01
    • 2013-08-03
    相关资源
    最近更新 更多