所以我知道这个问题可能与其他关于正则表达式的问题类似。我相信我的独特之处是因为我使用java来解析一些javascript,它可以包含括号内的括号用于匿名函数等。请考虑以下示例:
describe('a jasmine describe', function (){
it('login', function(){
//some function stuff
});
it('another it statement', function() {
//some additional stuff
});
});
我最终想要的是:
第1组:"茉莉花描述"
第2组:描述
的打开/关闭括号之间的所有内容我相信我有正则表达式来获得第1组我正在寻找的是:
Pattern r = Pattern.compile("(?:describe\\s*\\(\\s*')(.*?)(?=')", Pattern.CASE_INSENSITIVE);
但我不知道如何在特定描述括号的打开/关闭之间获取内容。
答案 0 :(得分:1)
正则表达式可能不是最佳工具,但您可以尝试使用正则表达式:
^(?m)(?<indent>\s*)describe\('([^']+)'[^{]+\{([\s\S]+?)\n\k<indent>\}\);
^(?m)
- 一行的开头,多行(可以替换为
使用Pattern.MULTILINE),(?<indent>\s*)
- 捕获indention befeore方法,describe\(
- 描述后面打开parathesis '([^']+)'
- 在单引号之间匹配文字,如果文字可以包含'
,则需要修改,[^{]+\{
- 将文字与第一个{
([\s\S]+?)
- 匹配任何内容,不情愿量化\n\k<indent>\}\);
- 新行,然后是捕获的缩进,
然后关闭方法体,将捕获第二组中的“茉莉花描述”,并将描述内容转换为第三组,因为额外的组indent
(名为第一组)应该确保正则表达式匹配{{{{ 1}}。 1组({...}
)在代码中的<indent>
函数之前捕获缩进,然后将其用作边界,其中完成匹配(在describe
之前有适当的缩进) 。这是匹配嵌套括号的一种解决方法,但代码需要很好地格式化。
Ofcoure,是Java代码,你需要加倍}
反斜杠。
答案 1 :(得分:-1)
此正则表达式根据需要匹配目标捕获组1和2:
describe\('([^']*).*?function\s*\(\)\s*\{(([^{]*\{[^}]*\})*[^}]*)\}
这将处理函数体中任意数量的非嵌套的卷曲括号输入。
请参阅live demo。