2014-11-21 183 views
-3

我要解析HTML文本,並採取了所有的iframe,腳本和input元素和寬度從表TR td.Finally屬性我得找TR WIDTHOUT TD內(嵌套)最佳的正則表達式進場

我的正則表達式是這樣的:

<tr>[^<td>]*<\/tr>|<script[^<]*>.*[\s\S]*<\/script>| 
<iframe[^<]*>.*[\s\S]*<\/iframe>| 
<(?:table|td|tr)[^<>]+style\s*=\s*(?:"|').*width(?:=|\:)\w*\W?(?:"|')|<(?:table|td|tr) [^<>]+width\s*(?:=|:)\s*(?:"|')?\w*(?:"|')? 

第一次看的不嵌套TD TR,第二尋找I幀的元素和第三個查找表| TD | TR含寬度樣式或表格樣式屬性| TD | TR直接使用寬度屬性

我的問題:

我使用由regex101.com產生下面的JavaScript代碼:

while ((m = re.exec(st)) != null) { 
      if (m.index === re.lastIndex) { 
       re.lastIndex++; 
      } 

if(m.search(...)){}else if(m.search(...))else ... 

的問題是,如果語句中我必須知道哪些模式是發現, 當時的TR沒有嵌套TD? Iframe?是寬度屬性? 如何優化代碼而不必使用這種邏輯?捕獲組?

此文本插入到網頁的textarea字段中,所以有時可能只是普通文本,問題在於用戶在不知道textarea的情況下複製並粘貼html代碼時。

+4

解析DOM原樣; ESP。因爲它是JavaScript。正則表達式會使事情過於複雜 – hjpotter92 2014-11-21 11:43:25

+4

您遇到問題的原因是因爲您試圖用螺絲刀(正則表達式)修剪草坪(解析HTML)。用HTML解析器解析HTML。使用HTML DOM導航和操作HTML。不要將DOM看作一個字符串。 – 2014-11-21 11:46:39

+0

問題是,我必須分析文本複製到textarea,有時這個文本不是HTML文本有時是因爲用戶複製和粘貼所有頁面而不知道 – tt0686 2014-11-21 11:54:38

回答

1

你不能用正則表達式解析HTML。如果您使用的是JavaScript,您可能會考慮使用documentFragment來操作DOM元素。

RegEx match open tags except XHTML self-contained tags

+0

問題是我必須分析文本複製到textarea,有時這個文本不是HTML文本有時是因爲用戶複製和粘貼所有頁面而不知道 – tt0686 2014-11-21 11:55:27