因此,我进行了全局可撤销的RegEx搜索并替换。我忘记在替换中包含'
。现在,我需要搜索与以下内容匹配的字符串。它不能以'
开头,并且结尾应为| translate
。这些是Angular转换键-它们可以放在模板文件(HTML)中。他们总是以{{翻译,并以}}结尾。现在最重要的是,他们可能会遇到间距或换行问题(可能性较小,但有机会)。因此可能是{{_ _ textToKeepAdd'To _ _ | _ _是空格或换行的可能性。
要匹配的字符串(不以'开始):
anyText' | translate
<other text or tags>{{ anyText' | translate
{{ // line break
anyText' | translate
anyText'
| translate // line break
不匹配的字符串:
'anyText' | translate
<other text or tags>{{ 'anyText' | translate
'anyText'
| translate
返回字符串格式:
'anyText' | translate
示例:
blahadskfjlksjdf' | translate = 'blahadskfjlksjdf' | translate
'SkipMe' | translate = not found for replacement bc it starts with a '.
And <other text or tags>{{ anyText' | translate = <other text or tags>{{ 'anyText' | translate
这是我所引用的代码-'(?:\w+\.){1,3}(?=\w+'\s+\|\s+translate\b)
我需要一个小组来捕获/返回替换组。
答案 0 :(得分:1)
这应该可以解决问题:
替换 \{\{(?:\s|\n)*(?!(?:'|\s|\n))(.*')(?:\s|\n)*(\|(?:\s|\n)+translate)\b
与 {{ '$1 $2
说明:
\{\{
-匹配两个大括号
(?:\s|\n)*
-匹配任意数量的空白字符
(?!(?:'|\s|\n))(.*')
-捕获组1;匹配任何非'
字符的连续字符串,后跟单个'
(?:\s|\n)*
-匹配任意数量的空白字符
(\|(?:\s|\n)+translate)
-捕获组2;匹配|
,后跟至少一个或多个空格字符,然后再加上单词translate
。
\b
-匹配单词边界
答案 1 :(得分:1)
我建议使用
查找内容:\{\{[\s\n]*(?!['\s\n])(.*')[\s\n]*(\|[\s\n]+translate)\b
替换为:{{ '$1 $2
请参见online regex demo(已更改以反映其在VSCode中的工作方式)。
详细信息
^
-一行的开头\{\{
-一个{{
子字符串[\s\n]*
-超过0个空格/换行符(?!['\s\n])
-如果在当前位置的右侧紧邻有'
或空白(包括换行符),则负匹配将使匹配失败。(.*')
-捕获组1:除换行符以外的任何0+字符,并尽可能多地添加'
字符[\s\n]*
-超过0个空格/换行符(\|[\s\n]+translate)\b
-第2组:|
,1个以上的空格/换行符和整个单词translate
。替换为'
,组1反向引用(指的是在组1中捕获的值),空格和组2反向引用(指的是在组2中捕获的值)。