javascript - 创建一个 Javascript RegExp 以在 HTML/php 模板中查找开始标签

标签 javascript regex parsing

我正在尝试编写一个 Javascript HTML/php 解析器,它会从 HTML/php 源中提取所有开始标签,并返回标签的类型和属性及其值,同时监视是否应评估值/属性静态文本或 php 变量。问题是当我尝试编写 Javascript RegExp 模式时,更具体地说是某些罕见的情况。我能够想出的正则表达式要么涉及负向后视(以应对结束的 php 标记——即匹配前面没有问号的结束括号)或在某些情况下失败。回顾版本看起来像:

<[a-zA-Z]+.*?(?<!\?)>

...并且工作完美,除了我的情况,必须避免使用后视。一个更 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>

我在处理问题时是否完全一团糟,还是在我的情况下真的需要后视?任何帮助是极大的赞赏。

最佳答案

只需使用 [^?] 确保 '>' 之前的最后一个字母不是 ?。不需要前瞻或后退。

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

括号和最后一个?也匹配像 <b> 这样的标签.

编辑 该解决方案不适用于没有属性的单字符标签。所以这是一个这样做的:
<[a-zA-Z]+(>|.*?[^?]>)

关于javascript - 创建一个 Javascript RegExp 以在 HTML/php 模板中查找开始标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8038235/

相关文章:

javascript - 当尝试升级到最新的 Hapi.js (9.x) 时,我们得到 : Error: Unknown handler: directory

c++ - C++中的电子邮件解析器

java - 在分割字符串函数中查找分隔符

parsing - 了解语法是否是 LR(1) 且没有解析表

python - 使用 python(具有 xmlns 属性)的 XML 解析不起作用

javascript - jQuery - 有人可以帮忙用 .ajaxComplete() 拼接 jQuery 代码吗?

javascript - 鼠标行为错误?

javascript - 使用 jquery 计算价格和 TVA

javascript - 仅验证字母字符的正则表达式

regex - 重命名 Unix 命令中的正则表达式