我正在尝试使用正则表达式来匹配与函数相对应的某些字符串组。现在看起来像这样:
(Spreadsheet.[^)\)]+\))
在其中找到具有该函数作为属性的变量 Spreadsheet。表达式继续执行,直到到达最后一个括号。对于简单的功能,例如
Spreadsheet.ADD(1,2)
正则表达式可以正常工作。
但是,如果我尝试进行任何类型的嵌套,该表达式将不起作用,因为它将停在括号内,而不是转到最后一个括号。
Spreadsheet.ADD(Spreadsheet.ADD(1, 2), 3)
因此,“, 3)”未被识别并最终被忽略。当然,由于我的代码处理它的方式,这个不寻常的字符串最终会导致错误。
对正则表达式有更多了解的人是否知道如何更改它,使其仅在最后一个括号而不是第一个括号时停止?
谢谢。
最佳答案
假设您只想匹配问题中所述形式的函数。如果您想匹配任何类型的函数(包括运算符、嵌套注释等),那么使用正则表达式将很难实现您想要的功能,请参阅 here 。无论如何,为了匹配最后一个括号,您可以使用:
(Spreadsheet\..+\))
这将匹配
电子表格.ADD(1,2)
电子表格.ADD(电子表格.ADD(1, 2), 3)
电子表格.ADD(电子表格.ADD(1, 2), 3)
foo
(foo 不是匹配的一部分)
您的正则表达式与完整字符串不匹配的原因是,当它找到不是 )
的字符(即第一个 )
时,它将停止。另外,作为旁白,Spreadsheet.
将匹配 Spreadsheeta
、Spreadsheetb
、Spreadsheetc
。要匹配点,您需要 \.
。
在我的正则表达式中 .+)
将包含最后一个括号,因为 +
是贪婪的,因此它将获得最长的匹配。顺便说一句,您可以使用 +?
关于javascript - 匹配所有内括号但不匹配外括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21978319/