簡體   English   中英

過濾 <form> 從HTML文本使用正則表達式

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM