我正在尝试匹配数字/单词的模式,然后将该分组拆分为数组。我有一个正则表达式,似乎正确识别事物(大多数情况下)。使用RegExr.com我已经做到了:
几乎是正确的。我不明白为什么它不会在面包屑中得到“面包屑”这个词。
我想拆分每个成分,然后将每个成分推入数组中的索引。
我试过了:
var regExp = '/(\d+)([^\d]+) |(\d+\/\d+) [^\d]+ /g';
cleanedText = ingredients.split(regExp);
console.log(cleanedText);
这不起作用。它根本没有分裂。它正在寻找[数字空间字] | [或分数空间单词]并且应该在它找到的每一个上分开。
答案 0 :(得分:3)
删除最后一个+
之后的尾随空格使用匹配而不是分割
交换正则表达式组,首先使用/,然后使用通常的
cleanedText = ingredients.match(/(\d+\/\d+)[^\d]+|(\d+)([^\d]+)/g);
var ingredients = '3 strips bacon 6 large mushrooms 1 tablespoon butter 1lb - Simply Balanced 1/2 onion, diced 1 clove garlic, sliced 3 ounces cream cheese 3 ounces blue cheese 1/3 cup bread crumbs';
cleanedText = ingredients.match(/(\d+\/\d+)[^\d]+|(\d+)([^\d]+)/g);
console.log(cleanedText);
答案 1 :(得分:2)
好的,为什么你的正则表达不匹配面包屑?因为你匹配所有以空格结尾的单词,并且由于“面包屑”是最后一个单词,所以它不会匹配。
正则表达式对空格敏感,因此请将其从以下位置删除:
/(\d+)([^\d]+)|(\d+\/\d+)([^\d]+)/g
然后,split method的工作方式与您的预期不同。 可能你的意思是使用匹配方法:
var sentence = "3 strips bacon 6 large mushrooms 1 tablespoon butter 1lb - Simply Balanced 1/2 onion, diced 1 clove garlic, sliced 3 ounces cream cheese 3 ounces blue cheese 1/3 cup bread crumbs";
var ingredients = sentence.match(/(\d+)([^\d]+)|(\d+\/\d+)([^\d]+)/g);
它返回一个数组,每个元素都是匹配的组。
编辑: 这个正则表达式修复了分数的问题:
/(\d+)([^(\d\/)]+)|(\d+\/\d+)([^\d]+)/g
答案 2 :(得分:2)
试试这个:
/((\d+\/\d+|\d+)\s*)([^\d]+)/g
我更喜欢regex101.com。它们提供了有关RegExp中正在发生的事情的更多信息。
参见我的例子:
https://regex101.com/r/nY1Hmh/2
此RegExp适用于以下整数:
3
杯或1
lb面粉 和
之类的分数1/3
茶匙 BTW:如果您使用match
而不是split
,那么您将返回一个数组,为您提供数字和字符串的其余部分。以防你想要将它们分开。
答案 3 :(得分:0)