Javascript regex - 从字符串中获取函数名
Posted
技术标签:
【中文标题】Javascript regex - 从字符串中获取函数名【英文标题】:Javascript regex - getting function name from string 【发布时间】: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
【参考方案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);
注意事项:
-
javascript 中允许的变量名称字符太多,无法在集合中表达。我的回答会解决这个问题。 More about this here
您可能需要考虑在
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"]
【讨论】:
这是对我有用的最简单的解决方案,谢谢!以上是关于Javascript regex - 从字符串中获取函数名的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript / regex:删除字符串中括号之间的文本[重复]
用于匹配正整数和负整数的 Javascript RegEx [重复]
Javascript Regex - 查找所有可能的匹配项,即使在已经捕获的匹配项中