【发布时间】:2011-01-24 22:07:36
【问题描述】:
我在寻找解析 HTML 标签属性时在这里找到了这个有用的正则表达式代码:
(\S+)=["']?((?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']?
效果很好,但缺少我需要的一个关键元素。一些属性是事件触发器,其中包含内联 Javascript 代码,如下所示:
onclick="doSomething(this, 'foo', 'bar');return false;"
或者:
onclick='doSomething(this, "foo", "bar");return false;'
我不知道如何让原始表达式不计算来自 JS 的引号(单引号或双引号),而它嵌套在包含属性值的引号集中。
我应该补充一点,这不是用来解析整个 HTML 文档的。它在我更新的较旧的“选择菜单的数组”函数中用作参数。其中一个参数是一个标签,它可以将额外的 HTML 属性附加到表单元素。
我已经做了一个改进的函数并且正在弃用旧的......但是如果代码中的某个地方是对旧函数的调用,我需要它来将这些解析为新的数组格式。示例:
// Old Function
function create_form_element($array, $type, $selected="", $append_att="") { ... }
// Old Call
create_form_element($array, SELECT, $selected_value, "onchange=\"something(this, '444');\"");
新版本采用 attr => 值对数组来创建额外的标签。
create_select($array, $selected_value, array('style' => 'width:250px;', 'onchange' => "doSomething('foo', 'bar')"));
这只是一个向后兼容性问题,其中对 OLD 函数的所有调用都被路由到新函数,但是旧函数中的 $append_att 参数需要变成新函数的数组,因此我需要使用正则表达式来解析小的 HTML sn-ps。如果有更好、更轻量级的方法来实现这一点,我愿意接受建议。
【问题讨论】:
-
不要用正则表达式解析html... -_-
-
这就是为什么你不应该用正则表达式解析 html。
-
所以,
title="Hello 'cruel' World"也不起作用。