用于匹配函数花括号内的所有内容的正则表达式

时间:2018-03-12 15:56:23

标签: javascript regex

我找到了许多用于匹配嵌套括号内容的正则表达式示例,但我想要做的是匹配:

  • 具有特定名称的功能
  • 匹配花括号内的所有内容(包括任何NESTED花括号)

例如:

function someFunc() {
  const a = 6;

  if (a === 7) {
    while (true) {
      break;
    }
  }
}

这应该找到function someFunc +忽略任何内容,直到第一次卷曲+然后匹配花括号内的所有内容,包括任何嵌套的大括号。

我是正则表达式的菜鸟,所以我无法告诉你我做了什么,我一直在看Regex to get string between curly braces "{I want what's between the curly braces}",但它们都不合适。谢谢!

PS预期输出是函数中所有内容的捕获组(我可以替换它)。

2 个答案:

答案 0 :(得分:1)

也许这有帮助?

functionName\(.*{(.|\n)*}\n{2,}

这将搜索一个名为functionName的函数,后跟一个左括号,它将获得所有内容,直到它找到一个结束的大括号后跟两个或多个换行符。

这是一个Regex101来测试它。

https://regex101.com/r/BadtRu/3

答案 1 :(得分:0)

我已经为此做了一个非常天真的函数(因为我知道该函数的内容是什么样的所有我需要的):

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);
};