我有一个字符串数组(下面的示例),它正在循环播放,我需要能够获取最后一个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 });
}
让我知道你的想法!
卡尔
答案 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;