[英]filtering <form> from html text using regular expression
我从ajax请求中获取整个html页面作为文本( xmlhttp.responseText
)
然后过滤文本提取HTML form
从文本和表单内的一切。
我写了一个正则表达式:
text.match(/(<form[\W\w]*<\/form>)/gim)
由于我不是正则表达式方面的专家,因此我无法确定它是否可以在每种情况下使用并将所有内容放入form
标记内?
有没有更好的方法可以让我在正则表达式中说出一切 ? 这样正则表达式看起来像
text.match(/(<form[__everything_syntaxt_here__]*<\/form>)/gim)
尝试这个:
function stripForm(s) {
var div = document.createElement('div');
div.innerHTML = s;
var scripts = div.getElementsByTagName('form');
var i = scripts.length;
while (i--) {
scripts[i].parentNode.removeChild(scripts[i]);
}
return div.innerHTML;
}
function getForm(s) {
var div = document.createElement('div');
div.innerHTML = s;
var scripts = div.getElementsByTagName('form');
var i = scripts.length;
var ret="";
while (i--) {
ret += scripts[i].innerHTML;
}
return ret;
}
var a = 'before Form <form action="" method="post"> <input type="text" /> <input type="text" /> <input type="text" /> </form><br/> after form';
alert(getForm(a));
alert(stripForm(a));
console.log(stripForm(a));
不得不处理IE 5 ,您可怜的灵魂。
您问题的快速答案[\\W\\w]
确实是匹配所有事物的最佳方法吗?
是的 ,JavaScript不支持使用s
修饰符.
匹配换行符。 进行[\\W\\w]
基本上会告诉正则表达式: “匹配任何单词字符或非单词字符” ,您可以看到绝对每个字符都属于这两个类别。
但是 ,如果您想使用更可靠的解决方案来处理<!-- html comments -->
以及页面上的多种形式,则最佳方法类似于此SO答案中所述,但已更改为HTML。
这就是我要使用的:
<!--(?:(?!-->)[\w\W])*-->|(<form(?:(?:(?!<\/form>|<!--)[\w\W])|(?:<!--(?:(?!-->)[\w\W])*-->))*</form>)
查看Debuggex演示以查看您实际得到的匹配。 然后,您可以在JavaScript中获得第一个捕获组。 如果它是空的,那只是为了摆脱这里解释的注释形式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.