Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java正则表达式获取括号之间的文本_Java_Regex - Fatal编程技术网

如何使用java正则表达式获取括号之间的文本

如何使用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

所以我知道这个问题可能和其他关于regex之类的问题类似。我相信我的是独一无二的,因为我用java来解析一些JavaScript,它可以包含括号内的匿名函数。
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\});

  • ^(?m)
    -行的开头,多行(可以替换为 使用Pattern.MULTILINE)
  • (?\s*)
    -在方法之前捕获缩进
  • descripe\(
    -描述,然后是并列句的开头
  • ”([^']+)”
    -如果文本可能包含
    ,则需要修改单引号之间的匹配文本
  • [^{]+\{
    -将文本匹配到第一个
    {
  • ([\s\s]+?)
    -用不情愿的量词匹配任何内容
  • \n\k\}\);
    -新行,后跟捕获的缩进, 然后关闭方法体
这将在第二组中捕获“jasmine Descripte”,并将描述内容放入第三组,因为附加组
缩进(命名为第一组),这将确保正则表达式与
{…}
的内容匹配。第一组(
)在代码中的
descripe
函数之前捕获一个缩进,然后将其用作边界,在该边界上完成匹配(在
}
上,在适当的缩进之前)。这是匹配嵌套括号的一种变通方法,但代码需要良好的格式


当然,是Java代码,您需要双反斜杠。

function(){}
不是java。你真的在使用javascript吗?或者你是在使用java从javascript文件中获取信息吗?我正在使用java解析一些javascript,这一点也在讨论中得到了澄清。如果你有无限嵌套大括号的潜力,你将无法用正则表达式方便地做到这一点。我肯定不会有无限嵌套大括号,什么都没有在某种程度上,我需要关注绩效。目标是否始终遵循“描述”文本?