匹配所有内侧括号,但不匹配外部

时间:2014-02-24 03:19:47

标签: javascript regex

我正在尝试使用正则表达式来匹配与函数对应的某些字符串组。现在它看起来像这样:

(Spreadsheet.[^)\)]+\))

它找到具有该函数作为属性的变量Spreadsheet。表达式一直持续到它到达最后的括号。对于简单的功能,如

Spreadsheet.ADD(1,2)

正则表达式可以正常工作。

但是,如果我尝试进行任何类型的嵌套,则表达式不起作用,因为它将停在内侧括号中而不是转到最后一个括号。

Spreadsheet.ADD(Spreadsheet.ADD(1, 2), 3)

因此,“,3)”未被识别,结尾被忽略。当然,由于我的代码处理它的方式,这个不寻常的字符串最终导致错误。

对正则表达式有更多了解的人是否知道它是如何被改变的,只有当它在最后一个括号而不是第一个时才会停止?

感谢。

1 个答案:

答案 0 :(得分:2)

假设您只想匹配您在问题中声明的表单中的函数。如果你想匹配任何类型的函数(包括运算符,嵌套的注释等),那么你想要的是正则表达式很难,请参阅 here 。无论如何,要匹配您可以使用的最后一个括号:

(Spreadsheet\..+\))

这将匹配

Spreadsheet.ADD(1,2)

Spreadsheet.ADD(Spreadsheet.ADD(1, 2), 3)

Spreadsheet.ADD(Spreadsheet.ADD(1, 2), 3)

(foo不是比赛的一部分)

你的正则表达式与完整字符串不匹配的原因是因为它会在找到不是)的字符时停止,这是第一个)。此外,旁边Spreadsheet.将匹配SpreadsheetaSpreadsheetbSpreadsheetc。要匹配您需要的点\.

在我的正则表达式.+)中将包含最后一个括号,因为+是贪婪的,所以它将获得最长的匹配。另外,您可以使用+?

指定非贪婪的匹配
相关问题