涉及花括号的正则表达式不起作用,而对于方括号它起作用
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
我有这个正则表达式,在
的帮助下匹配 [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