我希望将 Less mixin 调用转换为它们在 Scss 中的等价物:
.mixin();
应该变成@mixin();
.mixin(0);
应该变成@mixin(0);
.mixin(0; 1; 2);
应该变成@mixin(0, 1, 2);
我在第三个示例中遇到的困难最大,因为我基本上需要匹配用分号分隔的 n
组,并用逗号分隔的相同组替换它们。我想这依赖于我不熟悉的正则表达式中的某种重复组功能。
简单地替换 paren 中的分号是不够的——我需要一个只匹配 \.[\w\-]+\(.*\)
格式的 mixins 的正则表达式,但是显然在第二个匹配组中有一些魔法来处理上面的第三个例子。
我在 Ruby 中执行此操作,因此如果您能够提供与 gsub
兼容的替换语法,那就太棒了。 我想要一个单一的正则表达式替换,不需要多次传递来清理分号的东西。
最佳答案
我建议在您需要的子值周围添加两个捕获组,并在第一个 gsub
block 中使用额外的 gsub
来替换 ;
为,
仅在第 2 组。
见
s = ".mixin(0; 1; 2);"
puts s.gsub(/\.([\w\-]+)(\(.*\))/) { "##{$1}#{$2.gsub(/;/, ',')}" }
# => #mixin(0, 1, 2);
图案细节:
\.
- 文字点([\w\-]+)
- 第 1 组捕获 1 个或多个单词字符 ([a-zA-Z0-9_]
) 或-
(\(.*\))
- 第 2 组捕获(
,然后除换行符号外的任何 0+ 个字符尽可能多,直到最后一个)
和最后一个)
。 注意:如果有多个值,请使用惰性匹配 -(\(.*?\))
- 此处。
关于ruby - 将 Less mixins 转换为 Scss 的正则表达式替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39757272/