首页 > 解决方案 > 正则表达式中是否有类似 $nth / counter 的东西(在 Visual Studio 代码中的文本替换上下文中)?

问题描述

我在一个 javascript 文件中有一个很长的匿名函数数组,我想在函数之前添加一个名称。我想从那开始

[function(){...}       ,function(){...}      ,...,function(){...}]

到那个

[function foo_1(){...},function foo_2(){...},...,function foo_850(){...}]

我正在使用允许使用正则表达式搜索和替换字符串的 Visual Studio Code。我编写正则表达式没有问题,除了替换标记,这意味着这是您搜索的第 N 个匹配项。

像 $Nth 这样的东西会在文本中第一次出现搜索时返回 1。然后 2 以此类推。

或者甚至更好的 $Nth(45) 将从 45 开始然后 46...

这样的令牌存在吗?

标签: regexvisual-studio-codereplace

解决方案


您可以使用扩展正则表达式文本生成器

通过正常的 VSC 选择,选择function()您需要的所有部件。

  • 打开查找对话框
  • 搜索:function(
  • 选择所有匹配项:Alt+Enter

您可以将查找限制为选择。首先选择零件,在“查找”对话框中,首先要做的是选择Find in Selection(其中一个按钮或Alt+ L)。

执行命令:根据正则表达式(regex)生成文本

  • 第一次匹配表达式按下:(Enter接受默认值.*
  • 对于生成器表达式:function foo_{{=i+1}}\(function foo_{{=i+45}}\(
  • 如果您喜欢生成的内容:Enter
  • 如果按下Esc则操作终止

如果您必须经常这样做,您可以使用预定义的正则表达式字符串创建一个键绑定,并可选择使用输入对话框来修改预定义的字符串

{
    "key": "ctrl+shift+f7",  // or any other key combination
    "when": "editorTextFocus",
    "command": "regexTextGen.generateText",
    "args": {
      "originalTextRegex": ".*",
      "generatorRegex" : "function foo_{{=i+1}}\\(",
      "useInputBox" : true
    }
  }

推荐阅读