什么是正则表达式,允许我从<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>
我只是在属性名称之后
答案 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。