node.js - 正则表达式(sass 变量)
问题描述
(Node.js) 我必须匹配文件中的所有 Sass 变量。但是我可以在一个文件中包含变量和混合。我需要更新常规表达式以不匹配来自 mixin 指令或来自 mixin / 函数内容(嵌套)的变量。
所以只有:
- $测试:真;
- $white: #fff !default;
- $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
到}
单独的一行,并跳过此匹配,否则收集您的其他匹配。请参阅正则表达式演示。
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+ 个空格,后跟;
.
推荐阅读
- sql - 如何编写 SQL 查询以忽略具有空值的重复行
- couchdb - 524 响应没有 CORS 标头
- docker - 绕过 --password-stdin 警告(docker)
- java - 数组| 使用数组除法查找重复整数?
- scheduled-tasks - 切割具有定义长度的管子(具有恒定数量的项目类型的箱包装)
- yacc - 使 lex/yaac 脚本多线程
- ios - ARkit - SceneKit:在检测到的平面上动态放置 3D 模型
- python - 在 nltk 的 text6 中,第一个字母为大写,所有其他字母为小写
- ruby - 强制 WSO2 每次都用 google 登录
- php - Symfony 3.4 - 错误配置的服务