我正在整理一个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 }}
答案 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
并声明字符串的结尾)
积极回望另一个替代正向超前的选择是使用2个捕获组。
在替换使用组1和组2 $1$2
^(')(?:\w+\.){1,3}(\w+'\s+\|\s+translate$)
答案 1 :(得分:0)
'.*\.
至'
应该是您所需要的。这将替换所有与刻度线匹配的字符串,后跟任意数量的字符,再加上点。
如果您想更具体一点,可以使用此
'\w*\.*\w*\.*\w*\.
这将最多匹配3个点,中间包含单词。
在此处查看演示:https://regexr.com/4g652
编辑
我试图使其更加具体,这是我想出的:
'.+\.(?=\w*'\s*\|\s*translate)
这使用前瞻性来确保匹配的字符串后跟一个单词,然后是' | translate
。您认为这足够具体吗?