首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于匹配函数花括号内的所有内容的正则表达式

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

Stack Overflow用户
提问于 2018-03-12 15:56:22
回答 2查看 1.3K关注 0票数 0

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

  • 具有特定名称的函数
  • 匹配花括号内的所有内容(包括任何嵌套的花括号)

例如:

代码语言:javascript
复制
function someFunc() {
  const a = 6;

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

这应该会发现function someFunc+忽略任何直到第一个curly+then匹配大括号中所有内容的内容,包括任何嵌套的大括号。

我是regex的新手,所以我不能向你展示我做了什么,我一直在看Regex to get string between curly braces "{I want what's between the curly braces}",但它们都不合适。谢谢!

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

EN

回答 2

Stack Overflow用户

发布于 2018-03-12 16:32:38

也许这个能帮上忙?

代码语言:javascript
复制
functionName\(.*{(.|\n)*}\n{2,}

这将搜索一个名为functionName的函数,后面跟着一个括号,并得到所有内容,直到它找到一个结束的卷曲括号,然后是两个或多个换行符。

下面是一个测试它的Regex101。

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

票数 1
EN

Stack Overflow用户

发布于 2018-03-12 16:38:34

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

代码语言:javascript
复制
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);
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49239492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档