这会根据需要拆分字符串但不保留分隔符:
"200 g Joghurt".split(/[0-9]?\s?[–|-]?\s?[0-9]+\s?g{0,1}\b/)
["", " Joghurt"]
我有这样的案例
这个帖子建议使用积极向前看。 Javascript and regex: split string and keep the separator
但如果我把它分成了很多东西:
"200 g Joghurt".split(/(?=[0-9]?\s?[–|-]?\s?[0-9]+\s?g{0,1}\b)/)
["2", "0", "0 g Joghurt"]
问题: 如何在数字和g之后拆分上面的那个字符串(数字可以是任何数字,Joghurt可以是任何单词)。 e.g。
["200-400g", "joghurt"]
编辑: 有些情况下我没有g例如
所以只是与g匹配不起作用。我在例子中提到的案例是g的案例。并且g总是与一个数字或一系列数字组合。对此感到抱歉。我想将配方成分分成配料和量。 g是克,也许这使用例更清晰。
编辑2: 我也修改了一下,正则表达式基本上正如你在这个例子中看到的那样: https://regex101.com/r/rL7hY9/1 但它并没有将它分成一个整体。我的其他正则表达式案例也有这个问题,regex101上的匹配是整个组。但.split()不会将其拆分为一部分(具有正向前瞻)。
答案 0 :(得分:0)
如果你总是拥有" g"你可以使用它并重新添加" g"到第一个数组元素。这可能比尝试创建一些巨大的RegEx更容易。如果它只需要RegEx,你可能想要匹配一个带有负面lookbehind的空间" g"。但是,Lookbehinds并非在所有RegEx引擎中都可用。
答案 1 :(得分:0)
您可以使用此正则表达式 - (?!\s*g)\s
。我们匹配前面带有“g”的空格:
alert("200 g Joghurt".split(/(?!\s*g)\s/))
答案 2 :(得分:0)
好的,我找到了答案。我发布的第一个stackoverflow链接表明了积极的前瞻性。但它比这更容易,你只需要将正则表达式放在括号中:
"200 g Joghurt".split(/([0-9]+\s?[–|-]?\s?[0-9]*\s?g{0,1}\b)/gi)
Javascript - string.split(regex) keep separators
之后我删除空字符串和空格。
我创建的另一个解决方法是。首先使用.match
,这会提供匹配的正则表达式,然后使用.split
,这会切除正则表达式部分。如果没有global flag
,那么这很容易。