0

我很难找到这方面的任何例子,但它似乎不应该太难。

基本上我有一个返回 JSON 的 $resource。在控制器中,我从数据中为 $scope 分配了一些不同的东西,例如:

$scope.stuff = data.index.stuff

然后我在视图中对这些数据运行 ng-repeat。

我想做的是在“data.index.stuff”上运行一个正则表达式并取出匹配项。然后我想将匹配项分配给一个范围变量,其余的分配给另一个范围变量。所以给定这样的正则表达式:

/>>[0-9]{0,6}/g

和这样的数据:

>>4 this is some test data

我想把它变成两个变量,比如:

$scope.number = ">>4"

$scope.somedata = "this is some test data"

并允许通过 ng-repeat 循环新数据。

感谢您的关注!

4

2 回答 2

1

尝试以下模式:

/^(>>[0-9]{0,6}) (.*)$/gm
于 2014-07-10T19:24:54.303 回答
0

这是一个巨大的痛苦,但我终于让它工作了。我从 sanitize 模块中取出链接过滤器并将其修改为指令。它基本上通过某种模式的正则表达式将一个范围变成两个,如 OP 中所述。所以我从 scope.post.comment 开始,提取我的模式并将其放置在另一个范围中,并且剩余部分留在评论中。

app.directive('commentHandler', [
  function() {
    return {
      restrict: 'A',
      scope: {
        post: '=',
        thread: '='
      },
      templateUrl: "pages/comment.html",
      controller: function($scope, $sce, $sanitize) {
        re = /(>>(\d{1,4})).*/;

        raw = $scope.post.comment;
        html = [];
        quote = [];

        while (match = raw.match(re)) {
          url = match[2];
          i = match.index;
          addText(raw.substr(0, i));
          addLink(url, match[1]);
          raw = raw.substring(i + match[1].length);
        }
        addText(raw);
        $scope.post.comment = raw;
        $scope.post.quote = $sanitize(quote.join(''))

        function addText(text) {
          html.push(text);
        }

        function addLink(url, text) {
          quote.push('<a ');
          quote.push('href="');
          quote.push('post/' + $scope.thread.id + '/' + url);
          quote.push('">');
          quote.push(text);
          quote.push('</a>');
        }

      }
    };
  }
]);
于 2014-09-07T10:35:36.300 回答