VSCode搜索替换正则表达式

时间:2019-06-20 21:04:11

标签: javascript regex search replace visual-studio-code

我正在整理一个Angular转换文件,我需要在VScode上对转换键进行搜索替换。我需要剪掉最后一个键之前的所有内容,然后将其返回给替换。按键最多只能有3个深度。 key and keepThisInReplace下面的单词是任意的,并且将是不同的单词。下面的示例。

搜索字符串选项:

'key1.keepThisInReplace1' | translate
'key1.key2.keepThisInReplace2' | translate
'key1.key2.key3.keepThisInReplace3' | translate
'anyWord.AndLevelAmount.UpTo3AtLeast.anyWordToKeep' | translate

在搜索中找不到:

'../../assets/images/
'./../assets/images/
'.......
'path').join
'staging.site
etc...

以上内容应替换为:

'keepThisInReplace1' | translate
'keepThisInReplace2' | translate
'keepThisInReplace3' | translate
'anyWordToKeep' | translate

我正在尝试的方法不起作用-看起来像'\ w [^。] \ w *。* \ w *。将工作。几乎可以正常工作-在“路径”上拾取)。加入并继续在“ staging.site”上

最重要的键的前面确实有{{。但是,如果我锁定{{,则必须在替换中将其返回。示例= {{ key1.key2.keeptext | translate }} = {{ keeptext | translate }}

2 个答案:

答案 0 :(得分:1)

您可以将非捕获组与量词一起使用,该量词重复1-3次1+个单词字符,后跟一个点,并确保使用锚点^$启用多行。

在替换中,使用'

^'(?:\w+\.){1,3}(?=\w+'\s+\|\s+translate$)

如果字符串可以在文件中的任何位置,则可以省略锚点并在翻译后使用单词边界\b

'(?:\w+\.){1,3}(?=\w+'\s+\|\s+translate\b)

说明

  • ^字符串的开头
  • (?:\w+\.){1,3}重复1-3次,匹配1个以上的字符和一个点
  • (?=正向前进,断言右边直接是
    • \w+'\s+匹配1个以上的字符,'和1个以上的空白字符
    • \|匹配|
    • \s+translate$匹配1个以上的空格字符,translate并声明字符串的结尾
  • )积极回望

Regex demo

另一个替代正向超前的选择是使用2个捕获组。

在替换使用组1和组2 $1$2

^(')(?:\w+\.){1,3}(\w+'\s+\|\s+translate$)

Regex demo

答案 1 :(得分:0)

'.*\.'应该是您所需要的。这将替换所有与刻度线匹配的字符串,后跟任意数量的字符,再加上点。

如果您想更具体一点,可以使用此

'\w*\.*\w*\.*\w*\.

这将最多匹配3个点,中间包含单词。

在此处查看演示:https://regexr.com/4g652

编辑

我试图使其更加具体,这是我想出的:

'.+\.(?=\w*'\s*\|\s*translate)

这使用前瞻性来确保匹配的字符串后跟一个单词,然后是' | translate。您认为这足够具体吗?

演示:https://regexr.com/4g66i