我现在正在参加一些技术面试,我们会问一个关于检查大括号是否平衡的问题(开放和关闭的数量相同,并且关闭永远不会超过其匹配的开放),要求人们编写一个小函数来验证这一点。
有几位应聘者考虑尝试使用正则表达式来解决此问题,但很快就放弃了。我决定尝试一下,看看是否有可能。我目前正在使用以下测试字符串:
通过
{(function(r){ return r; })()}
{}{}{}{}
{{{{}}}}
失败
}{
{{}}}
{{{}}
我认为以下正则表达式将起作用 [^{}]*({[^{}]*})*[^{}]*
。想法是匹配非大括号字符,然后匹配 {
然后是非大括号字符,然后是 }
,重复括号匹配,最后以任何非大括号字符结尾。
然而当我在 regexr.com 上使用它时,似乎出现了一个无限错误,我不明白为什么:
有人能解释一下到底是什么问题吗?
{
和}
通常需要进行转义(在字符类外部),因为它们具有量词的含义。 - T.J. Crowder{
和}
并计数,将其作为第二个参数传递到函数中。 - xanatos