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