【问题标题】:How to capture within html attributes如何在html属性中捕获
【发布时间】:2011-04-19 16:57:20
【问题描述】:
<p <%=foo1%> <%=foo2%> >

   <h3><%=bar1%></h3>

   <h4><%=bar2%></h4>

</p>

我正在寻找一个常规表达式,其结果应该是 foo1 和 foo2,因为它们是声明为属性的值。 bar1 和 bar2 不应被捕获,因为它们未声明为属性。

我正在使用 ruby​​ 1.8.7。

【问题讨论】:

标签: ruby regex


【解决方案1】:

在这种情况下,我认为你最好做两次传球。首先,提取作为标签内属性的所有 数据值。然后,遍历并提取出 。

例如:

 <[^>]*?((?:<%=[^%]*%>\s*)+)[^<]*>

给你:

   <%=foo1%> <%=foo2%>

然后,一个简单的

<%=(.*?)%>

在第一个正则表达式的输出中,为您提供 foo1、foo2 等。我一直在尝试构建一个组合的,但我能看到的唯一方法是使用后视操作。我认为 Ruby 不支持这一点,而且无论如何,由于后视必须在同一点多次匹配,我相信大多数引擎都会将其排除在外。

【讨论】:

    【解决方案2】:

    大概是这样的

    <(?:[^>]*<%=(.*)%>)+[^>]*>
    

    【讨论】:

      【解决方案3】:

      这行得通吗?

      /(?:<|\G)[^<>]*?<%=([^<>]*?)%>/
      

      【讨论】:

      • 我想知道被否决的人是否知道\G 是什么。似乎每个人的回答都被否决了,即使是被接受的。
      • 嗯,我不明白为什么每个人都被否决了:/ - 对一个完全有效的建议投赞成票!
      【解决方案4】:

      这样的事情怎么样..

      \<\w+\s((.*)\s?)\>
      

      这是假设您将在输出上运行正则表达式

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-26
        • 2021-07-18
        • 1970-01-01
        • 1970-01-01
        • 2018-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多