我编写了一个简单的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'分配给正文而不是数字索引?
感谢您的反馈。
答案 0 :(得分:1)
尝试使用非贪婪的正则表达式/(\S+?)(\d+).(\S+)$/。据我所知,这应该适用于javascript。
答案 1 :(得分:0)
答案 2 :(得分:0)
默认情况下,捕获组是贪婪的,它们会尽可能多地捕获,并且由于+
表示一个或多个,它可以匹配最后一个数字并将第一个数字保留到.
或\S
。使用?
:
var reg = /(.+?)(\d+).(\S+)$/;
或者
var reg = /(\S+?)(\d+).(\S+)$/;