Javascript Regular Expression 获取大括号之间的内容(里面有大括号)

标签 javascript regex expression brackets

想像这样的字符串:

public function test(data)
{
    if (1 == 2)
    {
        alert("Wtf?");
    }

    switch (data)
    {
        case 'test':
            alert("Test");
        break;
    }
}

我需要解析该字符串,以便获得该函数的主体(内容)。

我已经让我的 reg exp 工作了,所以我有函数的内容,但是当有结尾时}。正则表达式停止,内容将如下所示:

if (1 == 2)
{
   alert("Wtf?");

我真的希望有人能帮助我..

这是我用于拆分此字符串的 Reg Exp:

var test = classContent.replace(/(?:(private|public)\s*)function\s*([a-zA-Z0-9_]+)\s*\(([a-zA-Z0-9_\,\s]*)\s*\)\s*{([^}]+)\}/gi, function(a, b, c, d, e) {

    classMethods[c] = {
        visibility : b.trim(),
        params : d.trim(),
        content : e.trim()
    };
});

最佳答案

这对于正则表达式来说通常是一个太棘手的问题。他们不能很好地处理嵌套结构。有些风格支持递归模式,但在这种情况下即使这样也太过分了。快速解决您给定的问题是这样的:

/(?:(private|public)\s*)function\s*([a-zA-Z0-9_]+)\s*\(([a-zA-Z0-9_\,\s]*)\s*\)\s*{(.+)\}/gis

这允许大括号之间的任何字符(包括大括号),并且由于 + 是贪婪的,这将一直到最后。

但是,如果您的字符串可以包含多个函数,这将使您获得从第一个函数名称到最后一个结束 } 的所有内容。我感觉你就是这种情况,因为你使用了全局修饰符 g

如果是这种情况(或无论如何),请考虑使用不同的方法(即,JavaScript 解析器或自己分析字符串并计算大括号)。也许this question会在那里帮助你。

关于Javascript Regular Expression 获取大括号之间的内容(里面有大括号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13101362/

相关文章:

php - 允许在字符串中使用破折号但不允许多个连续的破折号

c# - 在System.Linq.Expressions.Expression中加入In和NotIn,可以吗?

javascript - 使用 $timeout() 在特定时间间隔后隐藏页脚和页脚消息

javascript - knockoutjs 在 with 中调用 click 方法

python - 如何仅在特定字符串之后匹配数字,如果找到非数字则停止匹配 - Python 27

php - 正则表达式 - URL 中的希腊字符

javascript - 找不到模块 - 相对路径

JavaScript 特性 : valueOf clarification in if statement?

python - 组合或附加到 pyarrow.dataset.expressions

java - j2me : Works only for single digit operands 中的算术表达式求值