Cod*_*Fan 2 javascript regex parsing
我正在尝试编写一个Javascript HTML/php解析器,它将从HTML/php源中提取所有开始标记,并返回标记和属性的类型及其值,同时监视是否应评估值/属性静态文本或php变量.问题是当我尝试编写Javascript RegExp模式时,更具体地说是某些罕见情况.RegExp我能够提出任何涉及负面的lookbehind(以处理关闭的php标记 - 即匹配一个没有问号的结束括号)或在某些情况下失败.lookbehind版本看起来像:
<[a-zA-Z]+.*?(?<!\?)>
Run Code Online (Sandbox Code Playgroud)
......除了我必须避免使用lookbehind的情况外,它的作用非常完美.更友好的Javascript版本是:
<[a-zA-Z]+((.(?!</)(?!<[a-zA-Z]+))*)?>
Run Code Online (Sandbox Code Playgroud)
......在这种情况下除外:
<option value="<?php echo $img; ?>"<?php echo ($hpb[$i]['image_filename']==$img?' selected="selected"':''); ?>><?php echo $img; ?></option>
Run Code Online (Sandbox Code Playgroud)
我是否完全搞砸了这个问题,或者在我的情况下真的有必要吗?任何帮助是极大的赞赏.
只需确保'>'之前的最后一个字母不是?,使用[^?].不需要前瞻或后顾之忧.
<[a-zA-Z](.*?[^?])?>
Run Code Online (Sandbox Code Playgroud)
括号和最后?是也匹配标签<b>.
编辑该解决方案不适用于没有属性的单个字符标签.所以这是一个做的:
<[a-zA-Z]+(>|.*?[^?]>)
Run Code Online (Sandbox Code Playgroud)