javascript - Angular源码中的正则表达式

标签 javascript regex angularjs

只需阅读 Angular 源代码中的以下代码即可。它是依赖注入(inject)的一部分。基本上这更多的是关于正则表达式。

var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
var FN_ARG_SPLIT = /,/;
var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/;
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
var $injectorMinErr = minErr('$injector');
function annotate(fn) {
  var $inject,
      fnText,
      argDecl,
      last;

  if (typeof fn === 'function') {
    if (!($inject = fn.$inject)) {
      $inject = [];
      if (fn.length) {
        fnText = fn.toString().replace(STRIP_COMMENTS, '');
        argDecl = fnText.match(FN_ARGS);
        forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg){
          arg.replace(FN_ARG, function(all, underscore, name){
            $inject.push(name);
          });
        });
      }
      fn.$inject = $inject;
    }
  } else if (isArray(fn)) {
    last = fn.length - 1;
    assertArgFn(fn[last], 'fn');
    $inject = fn.slice(0, last);
  } else {
    assertArgFn(fn, 'fn', true);
  }
  return $inject;
}

我尝试在 Chrome 控制台中运行下面的代码,令我困惑的是第二个元素来自哪里?

就我的理解,我认为它应该只返回第一个元素,即function testService(testService, loginService)

var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
var testFunc = function testService (testService, loginService) {
    loginService.login();
}
var str = testFunc.toString();
var arr = str.match(FN_ARGS);
console.log(arr);
//["function testService(testService, loginService)", "testService, loginService"]

有人可以帮我解决这个问题吗,谢谢。

最佳答案

match 如果在索引 0 处匹配,则返回整个字符串。其他索引表示已匹配的正则表达式组。您可以在正则表达式中使用括号声明一个组。在本例中,该组为 ([^\)]*)

关于javascript - Angular源码中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31763089/

相关文章:

javascript - 在基于 Angularjs 的页面困境中识别元素/页面

javascript - 与 Javascript 中的密码生成器苦苦挣扎。无法正确更改页面上的文本

javascript - 在angular2中滚动顶部

javascript - 遍历 List 元素以构建一个数组以在 AJAX 请求中传递

javascript - 在 JavaScript 中从字符串的开头到结尾删除 HTML 内容组

javascript - 需要一个正则表达式来搜索匹配的姓氏

javascript - 如何使用 Prometheus 测量请求的不同时间

Javascript:如何剪切字符串的特定部分?

javascript - Angular Google Maps - 显示两个数据模型的坐标

angularjs - Angular -从Controller中的URL路径返回ID