gpt4 book ai didi

ruby - 将 Less mixins 转换为 Scss 的正则表达式替换

转载 作者:数据小太阳 更新时间:2023-10-29 08:11:19 26 4
gpt4 key购买 nike

我希望将 Less mixin 调用转换为它们在 Scss 中的等价物:

  1. .mixin(); 应该变成 @mixin();
  2. .mixin(0); 应该变成 @mixin(0);
  3. .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/

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