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

Regex involving curly braces not working, while for square brackets it does

我有这个正则表达式,在
的帮助下匹配 [abc] 作为字符串模式 "[]": "((\[[^\]]*($|\]))(\][^\]]*($|\]))*)

所以它将从 ABC A B [ABC] BC 捕获 [ABC]。所以方括号中的任何内容。

它按预期工作。

然后我写了一个这样的表达式
"{{}}": "((\{\{[^\}\}]*($|\}\}))(\}\}[^\}\}]*($|\}\}))*)"

捕捉 {{abc}} 之类的东西。现在,这在在线正则表达式测试器中确实有效,它从 ABC A B {{ABC}} BC.

捕获 {{abc}}

但是当我把它放在 JS 代码中时它什么也没做。同时,方括号表达式完成了它应该做的事情。我错过了什么吗?

我没有看到问题。我也尝试使用您的代码,它似乎有效:

function 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

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

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

console.log("[abc]".match(createStringRegex(["[]"])));     // it matches 
console.log("{{abc}}".match(createStringRegex(["{{}}"]))); // it matches
console.log("[abc]".match(createStringRegex(["{{}}"])));   // it doesn't match