gpt4 book ai didi

node.js - 正则表达式(sass 变量)

转载 作者:太空宇宙 更新时间:2023-11-04 00:04:32 25 4
gpt4 key购买 nike

(Node.js) 我必须匹配文件中的所有 Sass 变量。但我可以在一个文件中包含变量和混入。我需要更新常规表达式以不匹配 mixin 指令或 mixin/函数内容(嵌套)中的变量。

所以只有:

  1. $测试:真;
  2. $white: #fff !default;
  3. $sizes: (25: 0.25rem, 50: 0.5rem) !default;

正则表达式:/\$([^:]*)\s*:\s*([^;]*)\s*;/g

https://regex101.com/r/oRuWjS/1

$test: true;

$white: #fff !default;

$sizes: (
25: 0.25rem,
50: 0.5rem
) !default;

@mixin parent ($first, $second: "") {
.#{$first} {
@content;
}
}

最佳答案

使用

/@mixin[^(]*\([\s\S]*?^}$|\$([^:]*?)\s*:\s*([^;]*?)\s*;/gm

您可以从 @mixin 到单独一行的 } 进行匹配,并跳过此匹配,否则收集其他匹配。请参阅the regex demo .

var s = "$test: true;\n\n$white: #fff !default;\n\n$sizes: (\n  25: 0.25rem,\n  50: \n0.5rem\n) !default;\n\n@mixin parent ($first, $second: \"\") {\n  .#{$first} {\n    \n@content;\n  }\n}\n";
var rx = /@mixin[^(]*\([\s\S]*?^}$|\$([^:]*?)\s*:\s*([^;]*?)\s*;/gm;
var m, res = [];
while (m=rx.exec(s)) {
if (m[1]) {
res.push([m[1], m[2]]);
}
}
console.log(res);

详细信息

  • @mixin[^(]*\([\s\S]*?^}$ - 将跳过的替代方案:
    • @mixin - 文字子字符串
    • [^(]* - 除 (
    • 之外的 0+ 个字符
    • \( - 一个 (
    • [\s\S]*? - 任何 0+ 尽可能少的字符
    • ^}$ - 位于单独一行的 }
  • | - 或
  • \$ - 一个 $ 字符
  • ([^:]*?) - 第 1 组:: 之外的 0+ 个字符尽可能少
  • \s*:\s* - 包含 0 个以上空格的 :
  • ([^;]*?) - 第 2 组:除 : 之外的 0+ 个字符尽可能少
  • \s*; - 0+ 空格后跟 ;

关于node.js - 正则表达式(sass 变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52965525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com