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