删除字符串周围的括号并将内容放入新对象

时间:2015-06-03 08:57:11

标签: javascript regex angularjs angular-services angular-filters

我有一个角度服务,它返回一个内部有许多对象的数组。

$ scope.data:

[
    {
        date: "03/12/2014",
        name: "mr blue",
        title: "math teacher (Germany)"
    },
    {
        date: "04/02/2015",
        name: "mrs yellow",
        title: "chemistry teacher (Spain)"
    },
]

您可以在标题字段中看到它包含标题和位置。我如何分隔标题和位置?同时删除括号?

服务

$scope.loadFeed=function(e){        
    myService.parseFeed(url).then(function(res) {
        $scope.data = res.data.responseData.feed.entries;
    });
}

我所尝试的是:

$scope.loadFeed=function(e){        
    myService.parseFeed(url).then(function(res) {
        $scope.data = res.data.responseData.feed.entries;

        var strWithoutBracket = $scope.data[0].title.replace(/\(.*?\)/g,'');
        console.log(strWithoutBracket);

        $scope.location = strWithoutBracket;

    });
}

但是console.log(strWithoutBracket);显示为:

chemistry teacher

基本上我所追求的是没有位置的$scope.title$scope.location没有标题。

7 个答案:

答案 0 :(得分:4)

尝试:

$scope.data = [
    {
        date: "03/12/2014",
        name: "mr blue",
        title: "math teacher (Germany)"
    },
    {
        date: "04/02/2015",
        name: "mrs yellow",
        title: "chemistry teacher (Spain)"
    },
];

angular.forEach($scope.data, function(item){
    var values = /(.*)\s+\((.+)\)\s*$/.exec(item.title||"") || [];
    item.title = values[1];
    item.location = values[2];
});

console.log($scope.data);

<强> Demo

答案 1 :(得分:2)

以下是标题和位置的完整解决方案:

var str = "chemistry teacher (Spain)";

var regExp = /\(([^)]+)\)/;
var matches = regExp.exec(str);

var title = str.substring(0, str.indexOf('('));
var location = matches[1];

console.log('title : ' + title);
console.log('location : ' + location);

JSBin here

答案 2 :(得分:2)

您已经获得了化学老师,您应该将其设置为标题而不是位置。

您可以这样做:

var regExp = /\(([^)]+)\)/;
$scope.location = regExp.exec($scope.data[0].title);

$scope.data[0].title = $scope.data[0].title.replace(/\(.*?\)/g,'');

应根据需要更新您的标题和位置。

答案 3 :(得分:1)

这是你可以尝试的。在下面的正则表达式中,我假设标题和位置之间至少有一个空格字符。

var locationRegex = /\s+\(([a-zA-Z]*)\)*/;
var strWithoutBracket = $scope.data[0].title.replace(locationRegex,'');
var location = $scope.data[0].title.match(locationRegex)[1];

答案 4 :(得分:1)

您可以使用以下代码:

&#13;
&#13;
var str = "math teacher (Germany)";
var m = str.match(/(.*) *\((.*)\)/);
var obj = {
  title: m[1],
  location: m[2]
};
document.getElementById('output').innerHTML = JSON.stringify(obj);
&#13;
<div id="output"></div>
&#13;
&#13;
&#13;

答案 5 :(得分:1)

试试这个

var strWithoutBracket = $scope.data[0].title.replace(/([()])+/g,'');

答案 6 :(得分:1)

尝试这个

var strWithoutBracket = $scope.data[0].title.split((/\(([^}]+)\)/)[1]));
console.log(strWithoutBracket);