1

我编写了一个简单的 JavaScript 函数来将文件名拆分为多个部分:给定一个类型为“image01.png”的文件名,它将其拆分为“image”、“01”、“png”。

为此,我使用以下正则表达式:

var reg = /(\D+)(\d+).(\S+)$/;

这行得通。

但是,我也希望能够将这样的内容:day12Image01.png 拆分为“day12Image”、“01”、“png”。一般来说,我希望有任意数量的附加数字与正文相关联,只要它们不在扩展之前。

我试过:

var reg = /(.+)(\d+).(\S+)$/;

或替代方案:

var reg = /(\S+)(\d+).(\S+)$/;

令人困惑的是(对我来说),如果我将这些正则表达式应用于“image01.png”,我会得到以下分解:“image0”、“1”、“png”。

为什么在这些情况下将“0”分配给正文而不是数字索引?

感谢您的任何反馈。

4

3 回答 3

1

尝试使用非贪心正则表达式 /(\S+?)(\d+).(\S+)$/。据我所知,这应该适用于 javascript。

于 2013-02-08T11:01:05.700 回答
0

这是一个可以正常工作的可能的正则表达式:

/^(.+?)(\d+)\.(\S+)$/

请注意,您应该转义一个点.字符,否则正则表达式会将其视为“任何字符”(所谓的“特殊点”)。

于 2013-02-08T10:59:23.457 回答
0

默认情况下,捕获组是贪婪的,他们会尽可能多地捕获,并且由于+意味着一个或多个,它可以只匹配最后一个数字并将第一个留给.or \S。使他们不贪婪?

var reg = /(.+?)(\d+).(\S+)$/;

或者

var reg = /(\S+?)(\d+).(\S+)$/;
于 2013-02-08T11:01:46.837 回答