在解析HTML标记属性时,我在这里找到了这个有用的正则表达式代码:
(\S+)=["']?((?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']?
它的效果很好,但是却缺少了我需要的一个关键要素.一些属性是事件触发器,其中包含内联Javascript代码,如下所示:
onclick="doSomething(this,'foo','bar');return false;"
要么:
onclick='doSomething(this,"foo","bar");return false;'
我无法弄清楚如何将原始表达式嵌套在包含属性值的一组引号中,从而不计算JS中的引号(单或双).
我应该补充一点,这不是用于解析整个HTML文档.在我更新的旧版“选择菜单数组”函数中,它用作参数.参数之一是可以将额外的HTML属性附加到form元素的标记.
我做了一个改进的功能,不赞成使用旧的功能…但是如果代码中的某个地方调用了旧功能,我需要它将它们解析为新的数组格式.例:
// 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,array('style' => 'width:250px;','onchange' => "doSomething('foo','bar')"));
这只是一个向后兼容性问题,其中对OLD函数的所有调用都路由到新函数,但是旧函数中的$append_att参数需要被设置为新函数的数组,因此我需要使用regex进行解析小型HTML片段.如果有更好,更轻便的方法来实现此目的,我欢迎您提出建议.
最佳答案