javascript - 匹配所有内括号但不匹配外括号

标签 javascript regex

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

(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. 将匹配 SpreadsheetaSpreadsheetbSpreadsheetc。要匹配点,您需要 \.

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

指定非贪婪匹配

关于javascript - 匹配所有内括号但不匹配外括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21978319/

相关文章:

javascript - React Redux 处理大型嵌套树更新

javascript - Angular $resource - 预期响应包含一个数组,但得到一个对象

Python,正则表达式动态计数

php - 非贪婪匹配的问题

python - 根据连词递归地对句子进行分组

javascript - 使用 recompose 映射从上下文中消耗的 Prop

javascript - 在 Knockout 中循环不同对象的数组 - 绑定(bind)错误

javascript 相当于 java 的 Map.getKey()

regex - 如何重复捕获一组?

regex - 使 sed 仅替换精确的字符串