【发布时间】:2020-03-14 19:18:02
【问题描述】:
我有一些这样的文件
...some other block above also with a { block }
Main: Subroutine( )
{ <--
Include(foo = bar )
Call(foo = bar )
Repeat(foo = ibar )
{
Message("Message = bar number {ibar}" foo )
Something( )
Message("Message = foo {bar}" )
}
Message("Message = again {iterations}" )
For(start = foo , end = bar )
{
Comment( )
}
While(foo )
{
Comment( )
}
Comment( )
} <--
... some other block below also with a { block }
我需要匹配标有
/^Main:\s*\w*\(\s*\)\s*\{\s*((?:.*\s*)*?)\}$/gm
但它在第一个嵌套块的 } 之后停止,我不知道如何到达最后一个括号。
有什么方法可以匹配直到新行前面的大括号?
谢谢!
编辑:也许我应该补充一下,n 嵌套 { } 块是可能的
【问题讨论】:
-
JS 不支持递归正则表达式,需要解析嵌套的
{ ... }。手动执行此操作,找到Main:,然后找到第一个{,然后开始计算{和},直到左括号和右括号的数量相等。到此为止。 -
@Thomas 你能提供一个小代码sn-p吗?
-
也许你可以使用XRegExp Api:
XRegExp.matchRecursive(str, '{', '}', 'g'...
标签: javascript regex