【问题标题】:Regex find replace with multiplier in Atom or Sublime正则表达式在 Atom 或 Sublime 中查找用乘数替换
【发布时间】:2019-02-16 14:56:45
【问题描述】:

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

例如,转换

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

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

我的正则表达式发现:

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

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

$2 \* 16

【问题讨论】:

  • 这是什么语言?
  • @sean 这是在 IDE 中 也许将它的一部分更改为 (\d+\.\d*)r?em - 不确定 ') 和 (' 在做什么。这可能是 IDE 特定的正则表达式。我知道你想删除引号。但通常我会用 Python/JavaScript 之类的名称捕获组来做事
  • @JGFMK—不,我问的是代码是什么语言,因为它不是 CSS
  • 您不能在字符串替换模式中进行数学运算。您需要一种可以访问回调的成熟语言。 Python 在这里可能是最简单的。
  • @AdrianBartholomew 您不能期望匹配 2 并将其替换为 *16 (32) 的结果。您只能对此类替换进行硬编码。在 Notepad++ 中,你可以使用 Python Script 插件来做你想做的事,但是一个普通的 Python scipt 会更好。

标签: regex sublimetext3 atom-editor


【解决方案1】:

正如您在问题的 cmets 中所提到的,仅使用正则表达式查找和替换是无法直接实现的,但在 Sublime Text(如果具有类似功能的情况下可能是 Atom)中仍然可以使用内置功能.

要在 Sublime 中执行此操作,您需要结合使用 Find All 来选择所有文本和内置的 Arithmetic 命令来更改选择。 Arithmetic 命令的具体工作原理可以在this answer 中找到,所以我不打算在这里介绍。

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

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

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

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

结果是这样的:

【讨论】:

  • 美丽。我以迂回的方式用 Atom 完成了它。我首先用 1.5*16 替换了“1.5rem”。然后再次搜索所有这些模式。 Option-Enter 将它们放入缓冲区,然后 Shift-Command-Y 评估它们。我从不费心尝试 Sublime,因为我认为它不会有任何不同。刚刚尝试了您的解决方案,它是一个非常优越的解决方案,因此会接受它。 - 当我有能力的时候。也许有一个 Atom 的算术插件。干得好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 2017-07-24
相关资源
最近更新 更多