簡體   English   中英

正則表達式用於匹配函數花括號中的所有內容

[英]Regex for matching everything inside a function curly braces

我找到了很多用於匹配嵌套括號內內容的正則表達式示例,但我想做的就是匹配:

  • 具有特定名稱的功能
  • 匹配花括號內的所有內容(包括任何嵌套花括號)

例如:

function someFunc() {
  const a = 6;

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

這應該找到function someFunc +忽略任何內容,直到第一個花括號為止,然后匹配花括號中的所有內容,包括任何嵌套的花括號。

我是regex的菜鳥,所以我不能告訴你我做了什么,我一直在尋找Regex來獲取花括號“ {我想要花括號之間的東西}”之間的字符串,但是它們都不適合。 謝謝!

PS預期輸出是函數(然后可以替換)中所有內容的捕獲組。

也許有幫助嗎?

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

這將搜索一個名為functionName后跟一個開放的括號,並將獲取所有內容,直到找到一個閉合的花括號,然后是兩個或多個換行符。

這是一個Regex101對其進行測試。

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

我為此做了一個非常幼稚的功能(因為這就是我所需要的,因為我知道該功能的內容是什么樣的):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM