Javascript 涉及大括号的正则表达式不起作用,而对于方括号则起作用

Javascript 涉及大括号的正则表达式不起作用,而对于方括号则起作用,javascript,regex,string-matching,Javascript,Regex,String Matching,我有一个正则表达式,它在的帮助下以字符串模式匹配类似于[abc]的内容 “[]”:“(\\[^\]*($\\\])(\\][^\\]*($\\\]))*) 因此,它将从abcab[ABC]BC捕获[ABC]。因此,任何包含在方括号中的内容 它按预期的那样工作 然后我写了一个表达式,如 “{}”:“((\\{\\\\\\\\\\}]*($\\\\\\\\\\\\\}”)(\\\\\\\\\\\\\\}[\\\\\\\\}]*($\\\\\\\\\\\\\\}])” 要捕获类似于{{abc}}的内容

我有一个正则表达式,它在
的帮助下以字符串模式匹配类似于
[abc]
的内容
“[]”:“(\\[^\]*($\\\])(\\][^\\]*($\\\]))*)

因此,它将从
abcab[ABC]BC
捕获
[ABC]
。因此,任何包含在方括号中的内容

它按预期的那样工作

然后我写了一个表达式,如
“{}”:“((\\{\\\\\\\\\\}]*($\\\\\\\\\\\\\}”)(\\\\\\\\\\\\\\}[\\\\\\\\}]*($\\\\\\\\\\\\\\}])”

要捕获类似于
{{abc}}
的内容,这在在线正则表达式测试程序中确实有效,它从
abcab{{abc}}BC
捕获
{abc}}

但是当我把它放在JS代码中时,它什么也没做。而方括号表达式做了它应该做的。我遗漏了什么吗

  createStringRegex(stringTypes) {
    return new RegExp('^(' + this.createStringPattern(stringTypes) + ')', 'u');
  }

  // This enables the following string patterns:
  // 1. backtick quoted string using `` to escape
  // 2. square bracket quoted string (SQL Server) using ]] to escape
  // 3. double quoted string using "" or \" to escape


  createStringPattern(stringTypes) {
    const patterns = {
      '``': '((`[^`]*($|`))+)',
      '[]': '((\\[[^\\]]*($|\\]))(\\][^\\]]*($|\\]))*)',
      "{{}}": "((\\{\\{[^\\}\\}]*($|\\}\\}))(\\}\\}[^\\}\\}]*($|\\}\\}))*)",
      '""': '(("[^"\\\\]*(?:\\\\.[^"\\\\]*)*("|$))+)',
      "''": "(('[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)",
      "N''": "((N'[^N'\\\\]*(?:\\\\.[^N'\\\\]*)*('|$))+)"
    };

    return stringTypes.map(t => patterns[t]).join('|');
  }

这是围绕此的整个片段

我看不出问题所在。我还尝试使用了您的代码,它似乎可以工作:

函数createStringRegex(stringTypes){
返回新的RegExp('^('+this.createStringPattern(stringTypes)+'),'u');
}
//这将启用以下字符串模式:
//1.使用``对带引号的字符串进行反勾选以转义
//2.方括号带引号的字符串(SQL Server)使用]]进行转义
//3.使用“”或“”转义的双引号字符串
函数createStringPattern(stringTypes){
常量模式={
'``': '((`[^`]*($|`))+)',
'[]': '((\\[[^\\]]*($|\\]))(\\][^\\]]*($|\\]))*)',
"{{}}": "((\\{\\{[^\\}\\}]*($|\\}\\}))(\\}\\}[^\\}\\}]*($|\\}\\}))*)",
'""': '(("[^"\\\\]*(?:\\\\.[^"\\\\]*)*("|$))+)',
"''": "(('[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)",
“N”“:”((N'[^N'\\]*(?:\\\.[^N'\\]*)*('\$)+)”
};
返回stringTypes.map(t=>patterns[t]).join(“|”);
}
console.log(“[abc]”)。匹配(createStringRegex([“[]””));//相配
console.log(“{abc}}”.match(createStringRegex([{{}}]));//相配

console.log(“[abc]”匹配(createStringRegex([“{}}}]));//它不匹配
正则表达式是在另一个函数中使用的,我遵循其余表达式的格式,情况与此完全相似!这似乎不起作用。只是不在JS文件中,其他表达式可以在其中工作。@arpo对我来说似乎可以工作。这不是预期的行为吗?确实是预期的行为。非常感谢fr,意识到遗漏了什么。如果不麻烦的话,你能看看这个吗<代码>“{}”:”((\\{\\\\\\\\\\\\}]*($\\\\\\\+)(\\\\\\\\\\\\\\\\\\}]*($\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\}))“这是一个很好的逻辑,可以捕捉像{{{{{abc}}}}这样的东西,还是在规则的{abc}之上有n个括号?