Javascript 用于匹配函数中所有内容的正则表达式大括号
我发现了许多用于匹配嵌套括号内内容的正则表达式示例,但我想做的是匹配: 具有特定名称的函数 匹配大括号内的所有内容,包括任何嵌套的大括号 例如:Javascript 用于匹配函数中所有内容的正则表达式大括号,javascript,regex,Javascript,Regex,我发现了许多用于匹配嵌套括号内内容的正则表达式示例,但我想做的是匹配: 具有特定名称的函数 匹配大括号内的所有内容,包括任何嵌套的大括号 例如: function someFunc() { const a = 6; if (a === 7) { while (true) { break; } } } 这将找到函数someFunc+忽略第一个大括号内的任何内容,然后匹配大括号内的所有内容,包括任何嵌套大括号 我是regex的noob,所以我不能告诉你我做
function someFunc() {
const a = 6;
if (a === 7) {
while (true) {
break;
}
}
}
这将找到函数someFunc+忽略第一个大括号内的任何内容,然后匹配大括号内的所有内容,包括任何嵌套大括号
我是regex的noob,所以我不能告诉你我做了什么,我一直在看,但没有一个是合适的。谢谢
PS expected output是一个函数中所有内容的捕获组,我可以替换它。这是否有帮助
functionName\(.*{(.|\n)*}\n{2,}
这将搜索一个名为functionName的函数,后跟一个开括号,并将获取所有内容,直到找到一个右括号,后跟两个或多个换行符
这里有一个Regex101来测试它
我为此制作了一个非常简单的函数,因为这就是我所需要的,因为我知道函数的内容是什么样的:
function loader(content, functionName) {
// Find function
const indexOfFunc = content.indexOf(`function ${functionName}`);
if (indexOfFunc < 0) {
return content;
}
const openingBrace = content.indexOf('{', indexOfFunc);
// WARNING: We are assuming all braces in the function are balanced.
// This won't be the case if there are braces in strings or comments
// which aren't!
const startPos = openingBrace + 1;
let endPos = startPos;
let bracesToBalance = 1;
while (true) {
if (content[endPos] === '{') {
bracesToBalance++;
} else if (content[endPos] === '}') {
bracesToBalance--;
if (bracesToBalance === 0) break;
}
endPos++;
}
return content.slice(0, startPos) + content.slice(endPos);
};
计算方括号对于正则表达式来说太过分了,除非你使用了一些奇异的特性,这些特性扩展了正则语法的可能性,而这些可能在JavaScription中是不存在的。我不太清楚这个输入的预期结果是什么——你能澄清一下吗?类似这样的东西更适合使用解析器。有很多优秀的解析器引擎,例如。https://pegjs.org/ 事实上,由于您的解析是Javascript,您甚至可以使用Babel,它为您解决了所有AST问题。JS引擎不支持递归。所以你不能在JS中这么做。正则表达式只在JS中有用。感谢JavaScript,在这个函数之后只有一个换行符,我不能改变它,但是好主意,所有函数后面都是另一个吗?在这种情况下,在regexp的末尾添加函数并删除{2},它后面紧跟着另一个函数,但在内部还有三个使用'function'关键字的嵌套函数