正则表达式在 Atom 或 Sublime 中查找替换为乘数

Regex find replace with multiplier in Atom or Sublime

我想使用 Atom 或 Sublime 中的正则表达式 find/replace 函数,最好是 Atom,用它们各自的标量倍数替换所有出现的一组特定数值。

例如,转换

headerContainer: {
    fontSize:'1em',
    padding: '1.5rem',
},

headerContainer: {
    fontSize: 16,
    padding: 24,
},

我的正则表达式发现:

(')([\d.]+)r?em(')

我的正则表达式替换可能性:

 \* 16

正如在您的问题的评论中所提到的,仅使用正则表达式查找和替换是不可能直接实现的,但是在 Sublime Text 中(如果它具有类似的功能,可能还有 Atom)使用内置在功能上。

要在 Sublime 中执行此操作,您需要结合使用 Find All 到 select 所有文本和内置的 Arithmetic 命令来更改 select离子。 Arithmetic 命令如何工作的细节可以在 this answer 中找到,所以我不打算在这里介绍它。

要在此处执行您想要的操作,请执行以下操作:

  1. 使用 Find 面板(或 Replace 面板)搜索正则表达式 '[\d.]+r?em',但单击 Find All 按钮面板,它将 select 缓冲区中的所有匹配项。

  2. 使用命令选项板中的 Arithmetic 命令并输入表达式 round(float(x.strip("'rem"))*16) 并按回车键进入 运行 命令。

此处的表达式通过删除单引号和字符 rem 来修改 selected 文本 (x),将结果字符串转换为浮点值,是否乘法,然后四舍五入。

结果是这样的: