[英]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.