如何通过角度的api代码检查匿名函数签名获得多个匹配?

时间:2014-12-21 15:11:45

标签: javascript regex angularjs

使用angularjs中的api代码。对此功能感兴趣。 不了解如何获得多个匹配。例如,在return语句中使用args 1 vs 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;}"]

我理解args 2如果没有按msdn

设置全局,那么它们就是标准输出的一部分

但是 - 如何将[&#34; function(a,b)&#34;,&#34; a,b&#34;,...]作为匹配案例返回?< /强> 首先想到的是我对Sting.prototype.match不了解的东西, 现在,认为这是我对正则表达式不了解的事情 - 但是

这是否在RegExr link中进行了检查,并且仅显示匹配的&#39;功能(a,b)&#39;

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

1 个答案:

答案 0 :(得分:0)

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

DEMO

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

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

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

DEMO