【问题标题】:Javascript regex - getting function name from stringJavascript regex - 从字符串中获取函数名
【发布时间】:2018-05-19 16:56:53
【问题描述】:

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

假设我有这个字符串:

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

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

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

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

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

【问题讨论】:

  • 只是不要得到整个匹配,而只有捕获组。
  • 你会想注意到,在 javascript 中有很多函数,这个正则表达式不匹配,或者位置错误。
  • 很想知道{1} 在字符类中的作用。
  • 我认为{1} 应该在字符类之外。
  • 在月圆之夜,刚过午夜,你可以试试eval(`(${string})`).name

标签: javascript regex regex-group


【解决方案1】:

你可以使用:

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

获取function 和第一个( 之间的任何值(使用非贪婪量词*?),然后获取组[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( 之间添加注释的可能性,或者也可以换行。但这实际上取决于您打算如何使用此正则表达式。

举个例子:

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

}

【讨论】:

  • 虽然它似乎有效,但另一个答案更适合我的需要。谢谢。
【解决方案2】:

只需将最后一个\) 替换为(?=\()

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

【讨论】:

  • 这是对我有用的最简单的解决方案,谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多