RegEx获取属性但不获取标记名称

时间:2014-07-22 09:50:43

标签: javascript regex

我正在尝试使用RegExp从JavaScript字符串中获取属性,但我还有最后一个问题。

我可以获取带或不带值的属性,如果忘记它们之间的空间我可以得到属性但我的RegExp也将标记名称作为属性。

实例: http://regex101.com/r/zX5dJ7/3

正则表达式:(\s*\w+(?:=\"[^\"]*(?:\")?)?)

示例html:<div name="value"otherattribute foo="bar/>

有没有办法要求RegExp避免使用标签名称?

编辑:

如果HTML是这样的:

<meta charset="utf-8" alone foo="tab"/> <meta charset2="utf-8"foo2="tab"/> <meta charset3="utf-8"alone2 foo3="tab unclosed/>

我想抓住这样的每个属性:

  1. 字符集= “UTF-8”,
  2. 单独
  3. 富= “标签”,
  4. 字符= “UTF-8”,
  5. foo2的= “标签”,
  6. charset3 = “UTF-8”,
  7. alone2,
  8. foo3 =“tab unclosed /&gt;
  9. 我以前的RegExp运行良好,但是她抓住了标签名称,我只想让regexp避免使用标签名称。

3 个答案:

答案 0 :(得分:1)

如果您希望获得某些TAG与其关闭之间的所有内容,您可以使用

(?:<\w*)(.*)\/> 

然后你可以从中提取你想要的任何东西。如果您需要更多信息,请告诉我

答案 1 :(得分:1)

这是我能想到的最好的:

([<\w\-]+(?:=)?(?:"|')?[\w\-]+(?:"|')?)

使用正则表达式后,您必须跳过以<开头的匹配项。

DEMO: http://regex101.com/r/aL1sQ0/1

编辑:乔丹自己的最终解决方案:(?:<\w+)?(\s*\w+(?:=\"[^\"]*(?:\")?)?)?

答案 2 :(得分:0)

假设格式正确的HTML(请参阅我在OP中的评论应该假设格式化HTML),此正则表达式将解析您想要的所有内容,甚至允许&#34;&lt;&# 34;在标签名称中,您可以轻松摆脱标签并了解标签的内容以及不是什么

(\w+(=\".*?\"|)|<\w+)

in action

解析随机格式错误的HTML实际上 NOT 是正则表达式的工作。我在这里引用了许多regexper的无数次痛苦的哭声,当他们被问到&#34;我如何用正则表达式解析HTML?&#34;。搜索stackoverflow以获取此类问题,并查看人们的回答。您将完全看到 为什么我们应该假设非格式错误的HTML。

如上所述,在您获得匹配并将它们放入数组或其他内容后,您可以检查以&#34;&lt;&#34;开头的任何字符串。并且您将知道它的标签 - 其余的属性与其内容一起被捕获,所以不用担心。