0

给定一个字符串,例如:

23,234,456 first second third

如何将字符串拆分为两部分,其中第 1 部分包含开头的数字,第 2 部分包含其余部分——但前提是字符串以数字开头,并且数字可以用逗号分隔吗?换句话说,我想要两个结果:23,234,456first second third. 如果该字符串中有一个数字不是第一个数字的一​​部分,那么它应该在第二个结果中。

到目前为止,我最好的尝试是在开始时抓住数字,是这样的:

^[0-9]+(,[0-9]{3})*

这似乎抓住了开始行的逗号分隔或非逗号分隔的数字。但是,当我在 Javascript 控制台中运行它时,我不仅得到了完整的数字,而且还得到了最后 3 位数字与它们前面的匹配,。(例如23,234,456,456)。

至于将其余部分放入另一个变量中,我遇到了麻烦。我尝试使用\b,等等,但我认为我必须错过一些关于抓住其余部分的基本知识。

我在 Javascript 中这样做以防万一。

更多关于匹配和不匹配的示例。

2 one two three应该返回2并且one two three

2345 one two three应该返回2345并且one two three

2 one 2 three应该返回2并且one 2 three

2,234 one two 3,000应该返回2,234并且one two 3,000

第 1 部分和第 2 部分之间的空格可以包含在第 2 部分的开头。

4

2 回答 2

2

您需要为 first 和 rest 使用捕获组。试试这个正则表达式:

^(\d+(?:,\d+)*)\s+(.*)

现在第 1 组是逗号分隔的数字,第 2 组是其余的。\s+ 吃掉中间的空白。(至少需要 1 个)。

当然,如果正则表达式根本不匹配,那么它不会以数字或逗号分隔的数字列表开头,后跟一个或多个空格字符。

于 2012-06-27T21:10:05.983 回答
2

除非我大错特错,否则您可以简单地split()放在第一个空格上。

您还可以对照 来检查字符串/^[0-9,]+ /,如果不匹配,则可以首先跳过拆分。

编辑:不幸的是,我不认为 JavaScript 提供了一种简单的方法来分割字符的第一个实例。

这是一个匹配值并将它们放入捕获的组中的正则表达式:

^(?:([0-9,]+)\s)?(.*)$
于 2012-06-27T21:13:44.477 回答