我試圖從<form>
標籤中提取所有<input >
標籤。我創建了一個正則表達式,它可以識別整個<form>
標記和所有代碼,直到結尾</form>
,但我無法弄清楚如何匹配所有<input[^>]+>
。正則表達式將輸入標籤拉出表格
編輯:數據是一個字符串。我不能使用DOM函數,因爲它不是文檔的一部分。如果我將它插入到隱藏標記中,它會更改頁面的佈局,因爲該字符串包含整個HTML頁面,包括指向外部樣式表的鏈接。
我試圖從<form>
標籤中提取所有<input >
標籤。我創建了一個正則表達式,它可以識別整個<form>
標記和所有代碼,直到結尾</form>
,但我無法弄清楚如何匹配所有<input[^>]+>
。正則表達式將輸入標籤拉出表格
編輯:數據是一個字符串。我不能使用DOM函數,因爲它不是文檔的一部分。如果我將它插入到隱藏標記中,它會更改頁面的佈局,因爲該字符串包含整個HTML頁面,包括指向外部樣式表的鏈接。
正則表達式在解析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?。
爲什麼你不能只使用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! :)
您可以使用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無法解析完整的文檔(如果我沒有記錯的話)。
請問您打算如何處理結果。有可能是另一種更好的方式來做到這一點比正則表達式 – 2009-05-18 20:28:47
我同意。正則表達式在處理像HTML這樣的嵌套語法方面非常糟糕。 – 2009-05-18 20:30:45
是的,我知道...我正在做的是試圖將標籤拉出AJAX結果。但AJAX結果是一個字符串,所以我不能使用它的DOM功能。查看http://stackoverflow.com/questions/855404/can-javascript-access-the-dom-of-an-ajax-text-html-response – Josh 2009-05-18 20:33:19