Javascript Regexp将输入标记从表单中拉出

Javascript Regexp将输入标记从表单中拉出,javascript,regex,Javascript,Regex,我正在尝试从标记中提取所有标记。我已经创建了一个regexp,它可以识别整个标记和所有代码,直到结束,但我不知道如何匹配其中的所有]+> 编辑:数据是一个字符串。我不能使用DOM函数,因为它不是文档的一部分。如果我将其插入到隐藏标记中,它会更改页面的布局,因为字符串包含整个HTML页面,包括指向外部样式表的链接。正则表达式在解析HTML方面根本不好(请参阅原因)。您需要的是一个HTML解析器。有关使用各种解析器的示例,请参见。正则表达式在解析HTML方面根本不好(有关原因,请参见)。您需要的是一

我正在尝试从
标记中提取所有
标记。我已经创建了一个regexp,它可以识别整个
标记和所有代码,直到结束
,但我不知道如何匹配其中的所有
]+>


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

正则表达式在解析HTML方面根本不好(请参阅原因)。您需要的是一个HTML解析器。有关使用各种解析器的示例,请参见。

正则表达式在解析HTML方面根本不好(有关原因,请参见)。您需要的是一个HTML解析器。请参阅使用各种解析器的示例。

为什么不能直接使用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 inputFields=document.getElementById('form_id').getElementsByTagName('input');
for(变量i=0,l=inputFields.length;i
如果必须使用正则表达式:

var formHTML = document.getElementById('form_id').innerHTML;
var inputs = formHTML.match(/<input.+?\/?>/g);
var formHTML=document.getElementById('form_id').innerHTML;
var inputs=formHTML.match(//g);

注意,上面的正则表达式并不可靠,并且不会在所有情况下都工作,因此您应该使用DOM的原因是:)

为什么不能直接使用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 inputFields=document.getElementById('form_id').getElementsByTagName('input');
for(变量i=0,l=inputFields.length;i
如果必须使用正则表达式:

var formHTML = document.getElementById('form_id').innerHTML;
var inputs = formHTML.match(/<input.+?\/?>/g);
var formHTML=document.getElementById('form_id').innerHTML;
var inputs=formHTML.match(//g);

注意,上面的正则表达式并不可靠,并且不会在所有情况下都工作,因此您应该使用DOM的原因是:)

您可以使用
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; // ...
var html=document.createElement(“div”);
html.innerHTML=“”;
//现在您可以使用dom方法,例如getElementsByTagName
var inputs=html.getElementsByTagName(“输入”);
var foo=输入[0]。值;//。。。

您可能需要事先手动删除
标记,因为IE在解析完整文档时遇到问题(如果我没记错的话)。

您可以使用
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; // ...
var html=document.createElement(“div”);
html.innerHTML=“”;
//现在您可以使用dom方法,例如getElementsByTagName
var inputs=html.getElementsByTagName(“输入”);
var foo=输入[0]。值;//。。。


您可能需要事先手动删除您的
标记,尽管IE在解析完整文档时遇到困难(如果我记得正确)。

请问您打算如何处理结果。也许还有另一种比regexI同意的更好的方法。正则表达式在处理HTML之类的嵌套语法方面是出了名的差。是的,我知道。。。我所做的是尝试从AJAX结果中提取标记。但是AJAX结果是一个字符串,所以我不能在其上使用DOM函数。请看@Ayman,谢谢你澄清我的问题,我没想到要用反推!我可以问一下你打算如何处理这个结果吗。也许还有另一种比regexI同意的更好的方法。正则表达式在处理HTML之类的嵌套语法方面是出了名的差。是的,我知道。。。我所做的是尝试从AJAX结果中提取标记。但是AJAX结果是一个字符串,所以我不能在其上使用DOM函数。请看@Ayman,谢谢你澄清我的问题,我没想到要用反推!事实上我刚刚读到了。知道使用javascript将字符串转换为可以使用DOM函数的文档对象的方法吗?字符串是HTML,不是XML,我不能将其插入页面,也不能使用iFrame。()@Josh不,我不喜欢(JavaScript确实是我的拿手好戏),但这是一个有趣的问题。要是有地方问有趣的问题就好了…@Chas。谢谢实际上,我正在阅读jQuery的源代码——在您提供的第二个链接中,有人声称他们能够使用jQuery实现这一点。这应该是“JavaScript真的不是我的事”。@Chas。Owens——我通过DOM解析找到了答案。这是我以前想做的,但我不知道怎么做。或者更确切地说,我知道了怎么做,但肯定是在其他地方出错了,并且认为我试图做的是不可能的。谢谢事实上我刚刚读到了。知道使用javascript将字符串转换为可以使用DOM函数的文档对象的方法吗?字符串是HTML,不是XML,我不能将其插入页面,也不能使用iFrame。()@Josh不,我不喜欢(JavaScript确实是我的拿手好戏),但这是一个有趣的问题。要是有地方问有趣的问题就好了…@Chas。谢谢实际上,我正在阅读jQuery的源代码——在您提供的第二个链接中,有人声称他们能够使用jQuery实现这一点。这应该是“JavaScript真的不是我的事”。@Chas。Owens——我通过DOM解析找到了答案。这是我以前想做的,但我不知道怎么做。或者更确切地说,我知道了怎么做,但肯定是在其他地方出错了,并且认为我试图做的是不可能的。谢谢希望我能使用DOM。问题是我有一个字符串而不是文档对象。将字符串插入文档会导致文档布局更改。知道如何将HTML字符串解析为文档对象而不呈现它吗?您可以在隐藏的iframe中呈现它…@J-P这是可能的,在该元素上使用Document.createElement()和innerHTML。我希望我能使用DOM。问题是我有一个字符串而不是文档对象。将字符串插入文档会导致文档布局更改。知道将HTML字符串解析为文档对象而不进行渲染的方法吗