css - 查找 CSS 注释的正则表达式中不必要的星号

标签 css regex comments regex-negation

我想问这个作为我的 previous similar question 的更新但它变得太长了。

我试图理解 w3.org 中给出的正则表达式匹配 css 注释并产生疑问

他们为什么使用

\/\*[^*]*\*+([^/*][^*]*\*+)*\/
----------------^

不仅仅是

\/\*[^*]*\*+([^/][^*]*\*+)*\/

?

两者的工作原理相似。为什么他们那里多了一颗星?

  1. 让我们看看这部分:

    \*+([^/*][^*]*\*+)*
    -A- --B--     -C-
    

    Regex 引擎将解析 A 部分并匹配所有的星星,直到没有更多的星星或出现换行符。因此,一旦 A 完成,下一个字符必须是换行符或其他任何不是星号的字符。那为什么他们不使用 [^/] 而使用 [^/*]

  2. 同时查看重复捕获组。

    ([不是/或 * 的任何 一个 字符][不是 * 的零个或多个字符][一颗或多颗星])

    它捕获以至少一颗或多颗星结尾的字符组。所以 C 将拿走所有的星星,让 B 在下一轮没有星星可以匹配。

    所以B部分根本没有机会见到任何明星。这就是为什么我认为没有必要在那里放一颗星。

但是那个正则表达式在 w3.org 中,所以我想我的理解可能是错误的。请解释我遗漏了什么。

最佳答案

这已在 CSS3 Syntax module 中得到更正:

\/\*[^*]*\*+([^/][^*]*\*+)*\/   /* ignore comments */

请注意,多余的星号不见了,使这个表达式与您所拥有的完全相同。

所以看起来这只是他们在编写 CSS2 语法时的一个错误。我正在挖掘邮件列表文件,看看那里是否有任何相关的讨论。

关于css - 查找 CSS 注释的正则表达式中不必要的星号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10599089/

相关文章:

javascript - 第 1 组正则表达式匹配的 matchAll 数组

visual-studio-code - VS Code : How to make all text bold, 除了评论?

javascript - React-Bootstrap 导致左侧和右侧的边距

css - 为什么转换计时功能不起作用?

regex - NGINX/带有正则表达式的位置

python 正则表达式: use first blank as sep but maintain rest of blank sequence

git 提交每个文件的注释

javascript - 如何在 .json 文件中添加注释

javascript - Image.onload 回调触发不一致

html - 如何在汉堡包图标下方显示菜单列表?