我一直试图在两个大括号之间提取任何文本,但事实是这个文本可能包含其他花括号。
我一直在尝试的正则表达式(见下文)不起作用,因为它不会停止到结束的大括号。
实际正则表达式
/class\s+([A-Z]{1}[a-zA-Z0-9]+)\s+(?:<\s+([a-zA-Z0-9]+))?\s*{(.|\n|\r)*}/gm
根据下面的示例,它与第三组
的其余文本相匹配样品
class Main < Console {
+ main:Int () {
!String hello = "Hello, World!";
this.out(hello);
>> 0;
}
}
class Foobar {
+ foobar:None () {
#Some code...
}
}
匹配
Group 1: Main
Group 2: Console
Group 3:
有没有人知道如何实现这一目标(如果仅使用Regex就可以实现)?
答案 0 :(得分:0)
试试这个:
/class\s+([A-Z]{1}[a-zA-Z0-9]+)\s+(?:<\s+([a-zA-Z0-9]+))?\s*{[\s\S]*?\n}/gm
这是完全相同的,除了最后一位,而不是{(.|\n|\r)*}
,我改为{[\s\S]*?\n}
。让我们稍微分解一下:
[\s\S]*?
字面上匹配所有内容,但是懒惰,所以它不会跳过匹配之间的括号。\n}
仅匹配前面没有空格的右括号,因此它与中间右括号不匹配。希望这有助于:)