如何根据数量和名称拆分字符串列表?
例如,如果我的字符串str如下所示:
5 apples
7x pine apples
10 oranges
14x corn on the cob
apple pie
我能做到,
var list = str.split(/\r?\n/);
所以现在我在数组列表中有每一行,但现在我仍然需要从列表中的每个元素中获取数量和名称。
对于列表[0],我可以做'5个苹果',
var breakdown = list[0].split(' ');
对于列表[1],我必须从'7x'中删除'x',它将被错误地拆分为3而不仅仅是数量和名称等。
对于'苹果派',数量应为1。
预期结果始终是
breakdown[0]: quantity
breakdown[1]: name
无论输入的数量和名称如何,我如何获得数量和名称?
答案 0 :(得分:4)
每行上的正则表达式都可以。接下来是第二个.map()
将数字(或空)字符串转换为数字。
var data = `5 apples
7x pine apples
10 oranges
14x corn on the cob
apple pie`;
var result = data.split(/\s*?(?:\r?\n)+\s*/g).map(s =>
/^(?:(\d+)x?\s+)?(.+)$/.exec(s).slice(1)
).map(([q, d]) => [+q || 1, d]);
console.log(result);

如果你包含m
修饰符,它实际上也可以只使用正则表达式。
var data = `5 apples
7x pine apples
10 oranges
14x corn on the cob
apple pie`;
var re = /^(?:(\d+)x?\s+)?(.+)$/gm;
var m;
var result = [];
while((m = re.exec(data))) {
result.push([+m[1] || 1, m[2]]);
}
console.log(result);