Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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
Javascript 用于匹配函数中所有内容的正则表达式大括号_Javascript_Regex - Fatal编程技术网

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'关键字的嵌套函数