使用Regex拆分字符串,保留分隔符

Split String With Regex, Keep Seperator

本文关键字:保留 分隔符 字符串 Regex 拆分 使用      更新时间:2023-09-26

这会根据需要拆分字符串,但不会保留分隔符:

"200 g Joghurt".split(/[0-9]?'s?[–|-]?'s?[0-9]+'s?g{0,1}'b/)
["", " Joghurt"]

我有这样的案例

  • 100-200克
  • 1g
  • 240-1500克

这条线索建议用积极的眼光向前看。Javascript和regex:拆分字符串并保留分隔符

但如果我把它放进去,它会分裂成很多:

"200 g Joghurt".split(/(?=[0-9]?'s?[–|-]?'s?[0-9]+'s?g{0,1}'b)/)
["2", "0", "0 g Joghurt"]

问题:如何在数字和g后面拆分上面的字符串(数字可以是任何数字,Joghurt可以是任何单词)。例如

["200-400g", "joghurt"]

编辑:有些情况下我没有g,例如

  • 1首歌曲
  • 歌曲
  • 迈克尔·杰克逊歌曲

所以仅仅和g匹配是行不通的。我在例子中放的格是带有g的格,g总是与一个数字或一系列数字组合在一起。很抱歉造成混乱。我想把菜谱上的配料分成配料和分量。g是克,也许这会使用例更加清晰。

编辑2:我也对它进行了一些修改,regex基本上可以工作,正如您在本例中看到的那样:https://regex101.com/r/rL7hY9/1但它并没有把它分割成一个整体。我在其他regex情况下也有这个问题,regex101上的匹配是整个组。但是.split()并没有将其拆分为一部分(具有积极的前瞻性)。

如果你总是有"g",你可以使用它,并将"g"重新添加到第一个数组元素中。这可能比试图创建一些庞大的RegEx更容易。如果它只需要RegEx,你可能想为"g"匹配一个带有负面外观的空格。Lookbehinds并非在所有RegEx引擎中都可用。

您可以使用此regex-(?!'s*g)'s。我们匹配一个前面有"g"的空间:

alert("200 g Joghurt".split(/(?!'s*g)'s/))

好的,我找到了答案。我发布的第一个stackoverflow链接显示了积极的前景。但它比这更容易,您只需要将regex表达式放在括号中:

"200 g Joghurt".split(/([0-9]+'s?[–|-]?'s?[0-9]*'s?g{0,1}'b)/gi)Javascript-string.split(regex)保留分隔符之后,我删除空字符串和空白。

我创建的另一个解决方法是:首先使用.match,这样可以提供匹配的正则表达式,然后使用.split,这样就去掉了正则表达式的部分。只有在没有global flag的情况下,这才是容易的。