用于仅从特定标记内选择属性名称的正则表达式

时间:2012-10-13 20:46:49

标签: html css regex

什么是正则表达式,允许我从<form><input>标签中选择所有属性名称,而不是从任何其他HTML标签中选择?

例如:

<!-- all attribute names get selected -->
<input class="something" id="yes" type="text" name="my-field" value="Hello, world!">

<!-- class and id don't get selected because it's a div -->
<div class="something" id="no"></div>


<!-- class gets selected -->
<form class="my-form"></form>

我只是在属性名称之后

2 个答案:

答案 0 :(得分:2)

这样的正则表达式构建起来会非常复杂。尽管您can't match all HTML by regexes,但需要一个非常复杂的lookbehind来检查您要匹配的属性名称是否位于名称为“form”或“input”的开始标记之后。不要试图建立这样的正则表达式,你会疯狂和/或最终得到一个不可读,不可维护或不可媲美的怪物。

相反,使用DOM解析器(将有一个用于您的语言)并应用DOM选择器并获取元素的属性名称。

答案 1 :(得分:0)

用正则表达式做这件事并不容易,实际上用正则表达式做这件事并不是一个好主意。但有可能&gt;&gt;

input = '...';

var tmp = input, found, params = [];
var re = /(<(?:form|input)\b.*?\s)([\w\-]+)=(['"]).*?\3/gi;
do {
  found = 0;
  tmp = tmp.replace(re, function($0,$1,$2,$3) {
    params.push($2);
    found = 1;
    return $1;
  });
} while (found);

检查this demo