如何使用java正则表达式获取括号之间的文本
所以我知道这个问题可能和其他关于regex之类的问题类似。我相信我的是独一无二的,因为我用java来解析一些JavaScript,它可以包含括号内的匿名函数。如何使用java正则表达式获取括号之间的文本,java,regex,Java,Regex,所以我知道这个问题可能和其他关于regex之类的问题类似。我相信我的是独一无二的,因为我用java来解析一些JavaScript,它可以包含括号内的匿名函数。 describe('a jasmine describe', function (){ it('login', function(){ //some function stuff }); it('another it statement', function() { //some
describe('a jasmine describe', function (){
it('login', function(){
//some function stuff
});
it('another it statement', function() {
//some additional stuff
});
});
我最终想要的是:
第一组:“茉莉花”
第2组:说明文件中开/闭括号之间的所有内容
我相信我有正则表达式来获得我正在寻找的组1,它是:
Pattern r = Pattern.compile("(?:describe\\s*\\(\\s*')(.*?)(?=')", Pattern.CASE_INSENSITIVE);
但我不知道如何在特定描述括号的打开/关闭之间获取内容。此正则表达式根据需要匹配目标捕获组1和2:
describe\('([^']*).*?function\s*\(\)\s*\{(([^{]*\{[^}]*\})*[^}]*)\}
这将处理函数体中任意数量的非嵌套的带花括号的输入
请参阅。正则表达式可能不是最好的工具,但您可以尝试使用正则表达式:
^(?m)(?<indent>\s*)describe\('([^']+)'[^{]+\{([\s\S]+?)\n\k<indent>\}\);
^(?m)(?\s*)描述\('([^']+')[^{]+\{([\s\s]+?)\n\k\});
-行的开头,多行(可以替换为 使用Pattern.MULTILINE)^(?m)
-在方法之前捕获缩进(?\s*)
-描述,然后是并列句的开头descripe\(
-如果文本可能包含”([^']+)”
,则需要修改单引号之间的匹配文本”
-将文本匹配到第一个[^{]+\{
{
-用不情愿的量词匹配任何内容([\s\s]+?)
-新行,后跟捕获的缩进, 然后关闭方法体\n\k\}\);
缩进(命名为第一组),这将确保正则表达式与{…}
的内容匹配。第一组(
)在代码中的descripe
函数之前捕获一个缩进,然后将其用作边界,在该边界上完成匹配(在}
上,在适当的缩进之前)。这是匹配嵌套括号的一种变通方法,但代码需要良好的格式
当然,是Java代码,您需要双反斜杠。function(){}
不是java。你真的在使用javascript吗?或者你是在使用java从javascript文件中获取信息吗?我正在使用java解析一些javascript,这一点也在讨论中得到了澄清。如果你有无限嵌套大括号的潜力,你将无法用正则表达式方便地做到这一点。我肯定不会有无限嵌套大括号,什么都没有在某种程度上,我需要关注绩效。目标是否始终遵循“描述”文本?