如何从json键值中删除下划线

时间:2016-03-15 19:57:01

标签: javascript angularjs json

我有一个类似

的json文件
from your_project_name.settings import MEDIA_ROOT

class Visage(models.Model):
    ... 

    def save(self):
        super(Visage, self).save()
        filename = os.path.abspath(os.path.join(MEDIA_ROOT, self.image.name)
        traitement(filename)

它只是json文件的一部分,实际的json非常大。 我通过angularjs获取此json并将其显​​示为我的html页面

{{1}}

现在我想从键值中删除下划线并将其替换为空格。我该怎么做。

我试过{{key.replace('_','')}}。但它只删除了第一个下划线而不是全部。

4 个答案:

答案 0 :(得分:4)

var app = angular.module("app",[]);

app.controller("ctrl" , function($scope){
  $scope.items = {
     "Asian_Cities_Countries":
           [
             {"name":"Beijing","country":"China"},
             {"name":"Ankara","country":"Turkey"}
           ],
      "European_Cities_Countries":
          [
             {"name":"Paris","country":"France"},
             {"name":"Madrid","country":"Spain"}
          ]
 };
  
  });

app.filter('removeUnderscores', [function() {
return function(string) {
    if (!angular.isString(string)) {
        return string;
    }
    return string.replace(/[/_/]/g, ' ');
 };
}])
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl" class="panel-group" id="accordion">
            <div ng-repeat="(key,value) in items track by $index" class="panel panel-default menu-panel" ng-init="value = items[key]" style="margin-bottom:10px;">
            <a data-toggle="collapse" data-parent="#accordion" id="menu-link" href="#{{key}}">
                <div class="panel-heading panel-types">
                    <h4 class="panel-title">
                    {{key | removeUnderscores}}
  </h4>
                </div></a>
                <div id="{{key}}" class="panel-collapse collapsing menu-items">
                    <div ng-repeat="item in value">
                        <div class="row">
                            <div class="col-sm-12 col-lg-3">
                                <p class="item-name">
                                {{item.name}}
                                </p>
                            </div>
                            <div class="col-sm-12 col-lg-3">
                                <p>{{item.country}}</p>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

试试这个。使用类似的过滤器

 app.filter('removeUnderscores', [function() {
return function(string) {
    if (!angular.isString(string)) {
        return string;
    }
    return string.replace(/[/_/]/g, ' ');
 };
}])

和html

   {{key | removeUnderscores}}

答案 1 :(得分:3)

似乎你忘记了全局修饰符,试试这个:

key.replace(/_/g,' ')

与&#34; g&#34;所有出现都应该被替换

答案 2 :(得分:2)

AngularJS Docs明确指出Angular Expressions不包含正则表达式。

  

Angular表达式与JavaScript表达式

     

Angular表达式就像JavaScript表达式,但有以下不同之处:

     
      
  • 没有使用文字表示法创建RegExp:您无法在Angular表达式中创建正则表达式。
  •   

- AngularJS Developer Guide - Expressions

而是使用@hadijz

建议的自定义过滤器
app.filter('removeUnderscores', [function() {
return function(string) {
    if (!angular.isString(string)) {
        return string;
    }
    return string.replace(/[/_/]/g, ' ');
 };
}])

和html

{{key | removeUnderscores}}

答案 3 :(得分:0)

只是一个问题。为什么不在服务中处理json文件/数据?这种处理(尤其是字符串替换)并不是要在AngularJS中的HTML或控制器中完成。 我建议您解析服务中的json,然后将其传递给控制器​​。这通常是最好的做法..

请参阅此JSBIN以供参考。谢谢