2014-11-21 185 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