angular的api代码中的函数如何检查匿名函数签名获得多个匹配项

How is function in angular's api code checking for anonymous function signature getting multiple matches?

本文关键字:函数 检查 代码 api 何检查 angular      更新时间:2023-09-26

使用 angularjs 中的 api 代码。对此功能感兴趣。不明白它是如何获得多个匹配的。例如,在 return 语句中使用 args1 与 arg[0]。

var FN_ARGS = /^function's*[^'(]*'('s*([^')]*)')/m;
var STRIP_COMMENTS = /(('/'/.*$)|('/'*['s'S]*?'*'/))/mg;
function anonFn(fn) {
  // For anonymous functions, showing at the very least the function signature can help in
  // debugging.
  var fnText = fn.toString().replace(STRIP_COMMENTS, ''),
      args = fnText.match(FN_ARGS);
  if (args) {
    return 'function(' + (args[1] || '').replace(/['s'r'n]+/, ' ') + ')';
  }
  return 'fn';
}

所以。。

anonFn(function(a, b) { return a + b;}) 
// args = ["function (a, b)", "a, b", index: 0, input: "function (a, b) {return a + b;}"]

我知道 args2 和 on 是标准输出的一部分,如果没有为每个 msdn 设置全局

但是 - 它如何同时返回 ["函数 (a, b("、"a, b",...] 作为匹配情况?首先以为这是我对Sting.prototype.match的不了解,现在,认为这是我对正则表达式不了解的事情 - 但是

在 RegExr 链接中进行了此检查,它只显示匹配 - '函数(a, b('

其他链接:这是我的 plunker,这里是 src 页面 angularjs api anonFn

它返回整个匹配项以及组索引 1 内的字符。由于您在正则表达式中定义了捕获组,因此它将返回匹配的字符以及组索引 1 内的字符。

演示

请参阅上述演示链接的右侧。您的正则表达式与字符串function(a, b)匹配,并且由于捕获组,它还捕获子字符串a, b。最后,相应的函数同时返回匹配和捕获。

从正则表达式中删除捕获组,并且必须仅获取匹配的字符串作为输出。

^function's*[^'(]*'('s*[^')]*')

演示