【问题标题】:Match the beginning of a file in a VSCode regex search在 VSCode 正则表达式搜索中匹配文件的开头
【发布时间】:2020-05-22 06:11:10
【问题描述】:

我正在尝试在 VSCode 正则表达式搜索中匹配文件的开头以查找并删除以下模式:

//
Anything else to leave in place
etc.

我想删除所有包含//\n 作为第一个字符的文件中的第一行。但是,当我对 //\n 执行正则表达式搜索时,它显然匹配所有文件中的所有出现,无论它们在文件中的位置如何。

正则表达式语言提到 \A 的存在以匹配行的开头,或在某些编辑器中的文件,但 VSCode 拒绝此正则表达式为无效:\A//\n

所以我的问题是,如何在 VSCode 中匹配文件的开头来达到我需要的效果?

【问题讨论】:

标签: regex visual-studio-code


【解决方案1】:

Visual Studio Code 正则表达式中文件的开头可以匹配

^(?<!\n)
^(?<![\w\W])
^(?<![\s\S\r])

你可以使用

查找内容^//\n([\s\S\r]*)
替换为$1

或者,由于现在 VSCode 支持lookbehinds 作为现代 JS ECMAScript 2018+ 兼容环境,您也可以使用

查找内容^(?&lt;![\s\S\r])//\n
替换为:空

如果您想知道为什么使用[\s\S\r] 而不是[\s\S],请参考Multi-line regular expressions in Visual Studio Code

详情

  • ^ - 行首
  • // - // 子字符串
  • \n - 换行
  • ([\s\S\r]*) - 第 1 组 ($1):任何 0 个或更多字符,尽可能多到文件末尾。

^(?&lt;![\s\S\r])//\n 正则表达式的意思是:

  • ^(?&lt;![\s\S\r]) - 仅匹配第一行的开头,因为 ^ 匹配一行的开头,如果在当前位置的左侧有任何 1 个字符,则 (?&lt;![\s\S\r]) 否定后向查找失败
  • //\n - // 和换行符。

【讨论】:

  • ^(?&lt;![.\n]) 可能不正确:它会查找前面没有换行符(好)和实际点(不好)的地方。我只使用^(?&lt;!\n)
  • @DesmondHume 你知道,它正在工作,但你是对的,\n 单独在后视中就可以了。
猜你喜欢
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 2012-01-17
相关资源
最近更新 更多