正则表达式匹配 CSS 文件中的特定 javaDoc 属性,并提取有关 css 定义的数据

RegEx to match specific javaDoc attribute in a CSS file, and extract data about the css defintion

我正在尝试存储一些关于 CSS 样式的元数据,我们的应用程序可以使用这些元数据来构建允许用户 select 这些样式(以及其他内容)的菜单。

我认为 JavaDoc 样式注释是最好的方法,并使用像 config 或类似的属性。然后将 JSON 样式定义存储为 属性.

的值

我一直在尝试编写一些 RegEx (PHP) 来执行以下操作:

  1. 查找所有具有 @config 属性的 JavaDoc 注释。
  2. 提取@config的值作为JSON对象
  3. 然后匹配下面的css TAG和CLASS名称,如果它们定义在它下面。

所以这个评论和 class 定义可以提取到 3 个匹配项中。

/**
 * @config {name:'Orange Title', order:1}
 */
h1.title_orange {

}

更复杂的是 JSON 部分可能是多行的,多行可能包含也可能不包含 *.

最大的任务是你所做的假设(要测试的东西):

 (?:^\/\*\*[\s\n\r]+\*\s@config\s(.*)$|^\s+\*\/[\s\n\r]+[\#\.]?([\w-]+)\s*(?:[\#\.]*([\w-]+)\s*)*{$)

您可以在此Rubular.

中进行测试

我假设你在 javaDoc 的第一个注释行中有配置,我还假设你可能在这些之间随机有多个空格,你的 words/classes/ids 可能有 -.

你还需要什么?

编辑

This works great in Rubular. Although regex should be the same across languages, this doesn't seem to work in PHP Live RegexAlexander 4 mins ago

你是对的,所以我把它压缩成一个匹配组和this one seems to be working(你必须点击preg_match_all标签):

\/[*]{2}[\s\n\r]+\*\s@config\s(.*)[\s\n\r]+.*[\s\n\r]+\*\/[\s\n\r]+[\#\.]?([\w-]+)\s*(?:[\#\.]*([\w-]+)\s*)*{

这意味着,我正在考虑将 javaDoc 和 CSS 放在一起(javaDoc 有几行)。不过,可能需要进行一些调整。

编辑2

Thats amazing, thanks so much! What if the @config wasn't always the first entry in the comment? Is that still possible ? – Matt Bryson 7 mins ago

是:

\/[*]{2}(?:[\s\n\r]+.*)*[\s\n\r]+\*\s@config\s(.*)[\s\n\r]+.*[\s\n\r]+\*\/[\s\n\r]+[\#\.]?([\w-]+)\s*(?:[\#\.]*([\w-]+)\s*)*{

你可以试试这个PHP Live Regex in preg_match_all tab

编辑3

Matt 将自己的正则表达式发展为 something simpler。问题似乎是捕获组不能无限重复(获取所有 CSS classes/ids):

(?:[\#\.\,]([\w-]+)\s*)*

https://regex101.com/r/jM0yH0/6

因此,这个问题还需要解决...