JavaScript RegEx麻烦 - 匹配然后拆分

时间:2017-11-18 19:16:42

标签: javascript arrays regex split

我正在尝试匹配数字/单词的模式,然后将该分组拆分为数组。我有一个正则表达式,似乎正确识别事物(大多数情况下)。使用RegExr.com我已经做到了:

http://regexr.com/3h7d2

几乎是正确的。我不明白为什么它不会在面包屑中得到“面包屑”这个词。

我想拆分每个成分,然后将每个成分推入数组中的索引。

我试过了:

var regExp = '/(\d+)([^\d]+) |(\d+\/\d+) [^\d]+ /g';
cleanedText = ingredients.split(regExp);
console.log(cleanedText);

这不起作用。它根本没有分裂。它正在寻找[数字空间字] | [或分数空间单词]并且应该在它找到的每一个上分开。

4 个答案:

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

好像你可以用数字\ (?=\d)\g

之前的空格分开

{{1}}