创建一个JavaScript RegExp来查找HTML/php模板中的开始标记

bnlyeluc  于 2023-06-25  发布在  Java
关注(0)|答案(3)|浏览(123)

我试图写一个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>

我是完全搞砸了这个问题,还是在我的情况下真的需要向后看?任何帮助都是非常感谢的。

swvgeqrz

swvgeqrz1#

只要确保'>'前面的最后一个字母不是a就行了。,使用[^?]。不需要什么看头或跟屁虫。

<[a-zA-Z](.*?[^?])?>

括号和最后一个?就是匹配像<b>这样的标签。

EDIT解决方案不适用于没有属性的单字符标签。这里有一个例子:

<[a-zA-Z]+(>|.*?[^?]>)
kx1ctssn

kx1ctssn2#

更简单的答案是<[^/^>]+>

pdtvr36n

pdtvr36n3#

匹配所有的起始标记(包括像<a src="https://www.google.com">这样的锚点),从接受的答案中稍微简单一点:

<[^/][^>]*>

示例:

let str = "<div></div><hello></hello><a src='www.a.com/ff'></a>";
let regex = /<[^/][^>]*>/g;
let matches = str.match(regex);
console.log(matches);

相关问题