代码之家  ›  专栏  ›  技术社区  ›  RooksStrife

如果字符串不是以“-vscode”开头,则regex返回找到的组

  •  0
  • RooksStrife  · 技术社区  · 6 年前

    所以,我做了一个全局不可撤销的regex搜索和替换。我忘了包括 ' 在替换中。现在,我需要搜索与下面匹配的字符串。不能以 ' 而且会有 | translate 最后。这些是角度转换键-它们可以在模板文件(HTML)中全部显示。他们总是以开头,有翻译,以结尾。现在更关键的是他们可能有间距或断线的问题(不太可能,但有机会)。因此,它可能是UUUUUUUUUUUUUUUU到到转换是空格或换行的可能性。

    要匹配的字符串(无开头):

    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 回复  |  直到 6 年前
        1
  •  1
  •   rollingcodes    6 年前

    这应该可以做到:

    \{\{(?:\s|\n)*(?!(?:'|\s|\n))(.*')(?:\s|\n)*(\|(?:\s|\n)+translate)\b

    具有 {{ '$1 $2

    Regex 101 Demo

    • \{\{

    • (?:\s|\n)* -匹配任意数量的空白字符

    • (?!(?:'|\s|\n))(.*') ' '

    • (\|(?:\s|\n)+translate) -捕获组2;匹配 | translate .

    • \b

        2
  •  1
  •   Wiktor Stribiżew    6 年前

    我建议使用

    替换为 : '$1$2

    • [\s\n]*. -0+whitespaces/linebreaks
    • (.*'). -capting group 1:any 0+chars other than line break chars,as many as possible and then a '. char
    • (\[\s\n]+translate)\b -group 2:a ,1+whitespaces/linebreaks and a whole word translate
    • 替换为 '. ,group 1 backreference(reference to the value captured in group 1),space and group 2 backreference(reference to the value captured in group 2).。

      {{ '$1 $2

      参见 online regex demo

      enter image description here

      • ^ -行首
      • \{\{ {{
      • [\s\n]* -0+空格/换行符
      • (?!['\s\n]) ' 或空白(包括换行符)
      • (.*') 烧焦
      • (\|[\s\n]+translate)\b -第2组:A | translate

      替换的是 ,group 1 backreference(指在group 1中捕获的值),space和group 2 backreference(指在group 2中捕获的值)。

    推荐文章