如何根据要拆分的字符两边的字符拆分字符串

时间:2016-10-25 14:33:04

标签: javascript split

我有一个字符串数组(下面的示例),它正在循环播放,我需要能够获取最后一个ID和名称。

/18264:Blues (all)/19307:Acoustic Blues
/18264:Blues (all)/19308:Blues
/18267:Dance/Electronica

从上面的例子中,我想实现这个目标:

id: 19307
name: Acoustic Blues

id: 19308
name: Blues

id: 18267
name: Dance/Electronica

所以它获得了最后一个id和名称,但是我的名字中有斜线的问题(IE Dance / Electronica)是否有办法忽略斜杠?我的代码如下(示例):

angular.forEach(obj, function(val, key) {
    // /18264:Blues (all)/19307:Acoustic Blues
    var str = key.split('/').pop();
    // 19307
    var id = str.split(':')[0];
    // Acoustic Blues
    var name = str.split(':')[1];

    newObj.push({ 'id': id, 'name': name });
}

让我知道你的想法!

卡尔

2 个答案:

答案 0 :(得分:3)

这是正则表达式可以提供帮助的情况 - 它们被设计用于匹配字符串中的模式。对于此问题,您可以使用以下正则表达式:

\/(\d+):([^:]*)$

这由以下内容组成:

  • \/ - 转义/ - 起始斜线
  • (\d+) - 捕获组内至少有一个数字来捕获ID
  • : - 字面意思是冒号
  • ([^:]*) - 一个捕获组,搜索其他而不是冒号,以捕获名称
  • $ - 字符串的结尾

要在代码中使用它,您可以按照以下方式执行此操作:

angular.forEach(obj, function(val, key) {
    //note the extra / at the start and end, denoting this as a regular expression
    //in javascript
    var result = /\/(\d+):([^:]*)$/.exec(key);
    var id = result[1];
    var name = result[2];

    newObj.push({ 'id': id, 'name': name });
}

result是一个数组,其中索引1和2对应于正则表达式中的捕获组。

对于正在发生的事情的可视化以及正则表达式的细分,有许多在线工具,例如regex101.com可以提供帮助。

答案 1 :(得分:1)

这个怎么样?



var lines = ["/18264:Blues (all)/19307:Acoustic Blues", "/18264:Blues (all)/19308:Blues", "/18267:Dance/Electronica"];

var newObj = [];
for (var i = 0; i < lines.length; ++i) {
  var line = lines[i].split(/:/);
  newObj.push({"id" : line[line.length - 2].split(/\//)[1], "name" : line.slice(-1)[0]});
}

console.log(newObj);
&#13;
&#13;
&#13;