如何根据数量和名称拆分字符串列表?

时间:2017-11-20 01:07:37

标签: javascript jquery regex

如何根据数量和名称拆分字符串列表?

例如,如果我的字符串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

无论输入的数量和名称如何,我如何获得数量和名称?

1 个答案:

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