【问题标题】:Best Regular Expressions Approach [duplicate]最佳正则表达式方法[重复]
【发布时间】:2014-11-21 19:58:20
【问题描述】:

我必须解析一个 HTML 文本并从表 tr td 中取出所有 iframe、脚本和输入元素以及宽度属性。最后我必须在内部寻找 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,第二个查找 iframes 元素,第三个查找带有包含宽度样式的样式属性的 TABLE|TD|TR 或直接带有宽度属性的 TABLE|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 ...

问题是在 if 语句中我必须知道找到了哪个模式, TR 没有嵌套的 TD 吗?是 iframe 吗?是宽度属性吗? 我怎样才能优化代码而不必使用这种逻辑?捕获组?

此文本插入网页的文本区域字段中,因此有时可能只是普通文本,问题是当用户在不知道文本区域的情况下复制和粘贴 html 代码。

【问题讨论】:

  • 按原样解析 DOM;尤其是因为它是javascript。正则表达式会使事情变得过于复杂
  • 您遇到问题的原因是您试图用螺丝刀(正则表达式)修剪草坪(解析 HTML)。使用 HTML 解析器解析 HTML。使用 HTML DOM 导航和操作 HTML。不要将 DOM 视为字符串。
  • 问题是我必须分析复制到 textarea 中的文本,有时这个文本不是 HTML 文本,有时是因为用户在不知情的情况下复制并粘贴了所有页面
  • 我不明白为什么这是一个必须用正则表达式分析文本的特殊情况。插入数据库时​​以及在页面上显示时正确转义文本。

标签: javascript html regex optimization


【解决方案1】:

您无法使用正则表达式解析 HTML。如果您使用 JavaScript,您可能会考虑使用 documentFragment 来操作 DOM 元素。

RegEx match open tags except XHTML self-contained tags

【讨论】:

  • 问题是我必须分析复制到 textarea 中的文本,有时这个文本不是 HTML 文本,有时是因为用户在不知情的情况下复制并粘贴了所有页面
猜你喜欢
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 2020-02-18
相关资源
最近更新 更多