正则表达式将输入标签拉出形式

时间:2009-05-18 20:24:16

标签: javascript regex

我正在尝试从<input >标记中提取所有<form>个标记。我创建了一个正则表达式,可以识别整个<form>标记以及截至结尾</form>的所有代码,但我无法弄清楚如何匹配其中的所有<input[^>]+>

编辑:数据是一个字符串。我不能使用DOM函数,因为它不是文档的一部分。如果我将其插入隐藏标签,它会更改页面的布局,因为该字符串包含整个HTML页面,其中包含指向外部样式表的链接。

3 个答案:

答案 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在解析完整文档时遇到问题(如果我没记错的话)。