如何解决涉及花括号的正则表达式不起作用,而对于方括号则起作用
在
的帮助下,我有这个正则表达式匹配[abc]
之类的字符串模式
"[]": "((\\[[^\\]]*($|\\]))(\\][^\\]]*($|\\]))*)
所以它会从 [ABC]
中捕获 ABC A B [ABC] BC
。所以任何用方括号括起来的东西。
它按预期工作。
然后我写了一个表达式"{{}}": "((\\{\\{[^\\}\\}]*($|\\}\\}))(\\}\\}[^\\}\\}]*($|\\}\\}))*)"
捕捉像{{abc}}
这样的东西。现在,这在在线正则表达式测试器中确实有效,它从 {{abc}}
中捕获 ABC A B {{ABC}} BC
。
但是当我在 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('|');
}
这是围绕这个的整个片段
解决方法
我没有看到问题。我也尝试使用您的代码,它似乎有效:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。