Javascript正则表达式 - 从字符串获取函数名称

时间:2017-12-05 22:24:20

标签: javascript regex regex-group

我正在尝试从javascript中的字符串中获取函数名称。

假设我有这个字符串:

function multiply($number) {
    return ($number * 2);
}

我在javascript中使用以下正则表达式:

/([a-zA-Z_{1}][a-zA-Z0-9_]+)\(/g

但是,选择的是multiply(。这是错的。我想要的是没有multiply的单词(,但正则表达式应该记住函数名称必须附加(

我无法完成这件事。我怎样才能为此制作正确的正则表达式?我知道这不是我真正应该做的事情,并且它非常敏感,但我仍然想尝试使这项工作。

2 个答案:

答案 0 :(得分:2)

只需将\)替换为(?=\()

`function multiply($number) {
    return ($number * 2);
}`.match(/([a-zA-Z_{1}][a-zA-Z0-9_]+)(?=\()/g) // ["multiply"]

答案 1 :(得分:2)

您可以使用:

var name = functionString.match(/function(.*?)\(/)[1].trim();

function和第一个(之间获取任何内容(使用非gredy量词*?),然后获取组[1]的值。最后,trim删除周围的空格。

示例:

var functionString = "function dollar$$$AreAllowedToo () {  }";

var name = functionString.match(/function(.*?)\(/)[1].trim();

console.log(name);

备注:

  1. javascript中允许变量名称允许的字符在集合中表达得太多了。我的回答照顾到了这一点。 More about this here
  2. 您可能需要考虑function(之间评论的可能性,或者也是新行。但这实际上取决于你打算如何使用这个正则表达式。
  3. 参加考试:

    function /*this is a tricky comment*/ functionName // another one
       (param1, param2) {
    
    }