0

什么是允许我从标签中选择所有属性名称<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>

我只在属性名称之后

4

2 回答 2

2

这样的正则表达式构建起来会非常复杂。尽管您无法通过正则表达式匹配所有 HTML,但需要非常复杂的向检查来检查您要匹配的属性名称是否位于名称为“form”或“input”的开始标记之后。不要尝试构建这样的正则表达式,你会发疯和/或最终得到一个不可读、不可维护或不可理解的怪物。

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

于 2012-10-13T21:11:40.597 回答
0

用正则表达式来做这件事并不容易,实际上用正则表达式做这件事也不是一个好主意。但这是可能的>>

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);

检查这个演示

于 2012-10-13T21:40:24.537 回答