我正在尝试从<input >
标记中提取所有<form>
个标记。我创建了一个正则表达式,可以识别整个<form>
标记以及截至结尾</form>
的所有代码,但我无法弄清楚如何匹配其中的所有<input[^>]+>
。
编辑:数据是一个字符串。我不能使用DOM函数,因为它不是文档的一部分。如果我将其插入隐藏标签,它会更改页面的布局,因为该字符串包含整个HTML页面,其中包含指向外部样式表的链接。
答案 0 :(得分:3)
正则表达式在解析HTML方面根本不好(请参阅Can you provide some examples of why it is hard to parse XML and HTML with a regex?了解原因)。你需要的是一个HTML解析器。有关使用各种解析器的示例,请参阅Can you provide an example of parsing HTML with your favorite parser?。
答案 1 :(得分:2)
为什么你不能只使用DOM?
var inputFields = document.getElementById('form_id').getElementsByTagName('input');
for (var i = 0, l = inputFields.length; i < l; i++) {
// Do something with inputFields[i] ...
}
如果必须使用正则表达式:
var formHTML = document.getElementById('form_id').innerHTML;
var inputs = formHTML.match(/<input.+?\/?>/g);
注意,上面的正则表达式不可靠,并且在所有情况下都不起作用,因此你应该使用DOM! :)
答案 2 :(得分:0)
您可以使用document.createElement
创建一些元素,然后(ab)使用它的innerHTML
属性从字符串创建DOM:
var html = document.createElement("div");
html.innerHTML = "<form><input/><input/><input/></form>";
// now you can use dom methods, e.g. getElementsByTagName
var inputs = html.getElementsByTagName("input");
var foo = inputs[0].value; // ...
您可能需要事先手动删除<html>
标记,因为IE在解析完整文档时遇到问题(如果我没记错的话)。