我试图写一个Javascript HTML/php解析器,它将从HTML/php源代码中提取所有打开的标签,并返回标签的类型和属性及其值,同时监视是否应该从静态文本或php变量中评估值/属性。问题是当我尝试编写Javascript RegExp模式时,更具体地说,是在某些罕见的情况下。我能够提出的RegExp要么涉及负向后看(以处理结束的php标记--即匹配前面没有问号的结束括号),要么在某些情况下失败。lookbehind版本如下所示:
<[a-zA-Z]+.*?(?<!\?)>
...和工程完美,除了我的情况下,必须避免使用lookbehind。一个对JavaScript更友好的版本是:
<[a-zA-Z]+((.(?!</)(?!<[a-zA-Z]+))*)?>
...除了在这种情况下有效:
<option value="<?php echo $img; ?>"<?php echo ($hpb[$i]['image_filename']==$img?' selected="selected"':''); ?>><?php echo $img; ?></option>
我是完全搞砸了这个问题,还是在我的情况下真的需要向后看?任何帮助都是非常感谢的。
3条答案
按热度按时间swvgeqrz1#
只要确保'>'前面的最后一个字母不是a就行了。,使用[^?]。不需要什么看头或跟屁虫。
括号和最后一个?就是匹配像
<b>
这样的标签。EDIT解决方案不适用于没有属性的单字符标签。这里有一个例子:
kx1ctssn2#
更简单的答案是<[^/^>]+>
pdtvr36n3#
匹配所有的起始标记(包括像
<a src="https://www.google.com">
这样的锚点),从接受的答案中稍微简单一点:示例: