如何根据被分割字符两侧的字符分割字符串



我有一个字符串数组(示例如下)正在循环,我需要能够获得最后的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舞蹈/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 });
}

让我知道你的想法!

卡尔

在这种情况下,正则表达式可以提供帮助——它们是为匹配这样的字符串中的模式而设计的。对于这个问题,您可以使用以下正则表达式:

/(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可以提供帮助。

这个怎么样?

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);

最新更新