涉及花括号的正则表达式不起作用,而对于方括号则有效
Posted
技术标签:
【中文标题】涉及花括号的正则表达式不起作用,而对于方括号则有效【英文标题】:Regex involving curly braces not working, while for square brackets it does 【发布时间】:2021-07-26 14:14:19 【问题描述】:在"[]": "((\\[[^\\]]*($|\\]))(\\][^\\]]*($|\\]))*)
所以它会从ABC A B [ABC] BC
捕获[ABC]
。所以任何东西都用方括号括起来。
它按预期工作。
然后我写了一个类似"": "((\\\\[^\\\\]*($|\\\\))(\\\\[^\\\\]*($|\\\\))*)"
捕捉abc
之类的东西。现在,这确实适用于在线正则表达式测试器,它从ABC A B ABC BC
捕获abc
。
但是当我在 JS 代码中使用它时,它什么也没做。同时,方括号表达式做了它应该做的事情。我错过了什么吗?
【问题讨论】:
【参考方案1】:我没有看到问题。我也尝试使用你的代码,它似乎工作:
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
【讨论】:
正则表达式在另一个函数中,我遵循其余表达式的格式,情况类似于***.com/questions/28549707/… 没错!它似乎以其他方式工作。只是不在 JS 文件中,其他表达式在其中起作用。 @arpo 对我来说它似乎有效。这不是预期的行为吗? 确实是预期的行为。非常感谢fr,意识到缺少了什么。 如果不麻烦,你能看看这个吗?"": "((\\\\[^\\\\]*($|\\+))(\\\\[^\\\\]*($|\\\\))*)"
这是在常规 abc 之上捕获诸如 abc 或 n 个封闭大括号之类的好逻辑吗?以上是关于涉及花括号的正则表达式不起作用,而对于方括号则有效的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试使用正则表达式来指定字符数量。大括号不起作用[重复]