【发布时间】:2014-09-13 01:56:04
【问题描述】:
我正在尝试使用 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/>
我想像这样捕获每个属性:
- charset="utf-8",
- 独自一人,
- foo="tab",
- charset2="utf-8",
- foo2="tab",
- charset3="utf-8",
- 单独2,
- foo3="标签未关闭/>
我以前的正则表达式运行良好,但她抓住了标签名称,我只想让正则表达式避免标签名称。
【问题讨论】:
-
你的意思是regex101.com/r/zX5dJ7/4。查看右侧的捕获组。
-
是的,我想避免获取标签名称(现场示例中的元数据),但在您的解决方案中,属性“单独”不会被捕获。
-
请在问题本身中发布您的示例输入和所需的输出。 foo3="tab unclose 应该如何返回?
-
您的测试
html似乎是故意的,可能是为了检查格式不正确的情况?即使是浏览器在解析其中一些标签时也会遇到问题,我看不出正则表达式如何在 javascript 中提供帮助。在任何情况下,在 javascript 正则表达式中都很难处理任意格式错误的输入,尤其是因为我们没有后顾之忧。至于如何处理格式正确的 html,我认为答案就足够了,如果可以假定 html 格式正确,任何正则表达式的制作和使用都会简单得多。 -
是的,我知道 html 必须正确格式化才能使正则表达式更有效。但它仅用于突出显示字符串中的文本(属性)。如果html格式错误,请尝试处理。
标签: javascript regex