正则表达式:忽略“但不是其余的第一次和最后一次出现”

时间:2017-08-16 15:12:24

标签: javascript regex

我有三个字符串:

  
      
  1. {{“ErrorMsg:[Microsoft] [ODBC SQL Server驱动程序] [SQL Server]用户'blah'登录失败”}}

  2.   
  3. {{“ErrorMsg:致命:角色\”foobar \“不存在\ n”}}

  4.   
  5. “{{\”param1 \“},{\”param2 \“}}”

  6.   

对于前两种情况,我想获得一个1元素数组,而对于第三种情况,我想获得一个2元素数组(['param1', 'param2'])。以下表达式适用于第一个字符串:

/[^{"}]+(?=\"})/g

但不适用于第二个字符串,因为内部还有两个"。我应该如何使它发挥作用?

您可以尝试here

3 个答案:

答案 0 :(得分:1)

  

{{"(。*)"}}返回完整字符串,但不排除{{"和"}}

您需要以最简单的方式提取匹配的组:

str.replace(/{{"(.*)"}}/g, function(m, g) { 
    console.log(g);
});

答案 1 :(得分:1)

您可以使用此正则表达式:

/{\\?"([^}]+?)(?=\\?"})/g

匹配组将在捕获的组#1中可用,您可以使用循环中调用while的{​​{1}}循环进行提取。

Updated RegEx Demo

RegEx分手:

regex.exec(str)

答案 2 :(得分:0)

试试这个:

(\\\"|[^\"])+(?=\"})

关键是它允许包含\\\"(转义双引号)或[^\"](任何非双引号符号)并以"}结束

regex101.com example