JavaScript中regexp的奇怪行为

JavaScript中regexp的奇怪行为,javascript,regex,Javascript,Regex,我编写了一个简单的JavaScript函数来将文件名拆分为几个部分:给定一个“image01.png”类型的文件名,它会将其拆分为“image”、“01”、“png” 为此,我使用以下正则表达式: var reg = /(\D+)(\d+).(\S+)$/; 这很有效 但是,我希望能够将day12Image01.png拆分为'day12Image','01','png'。一般来说,我希望有任何数量的额外的数字与身体相关,只要他们不属于权利之前的扩展 我试过: var reg = /(.+)(\

我编写了一个简单的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”指定给正文而不是数字索引


感谢您的反馈。

这里有一个可能的正则表达式,它应该可以正常工作:

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

注意,你应该避开一个点<代码> ./COD>字符,否则正则表达式会认为它是(所谓的<强>”特殊点“< /强>”。

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

注意,您应该避开点<代码> ./COD>字符,否则ReGEX会将其视为(所谓的<强>”特殊点“< /强>”。

< P>尝试使用非贪婪正则表达式/(\s+.)(\D+)(\s+)$//。据我所知,这应该适用于javascript。

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

默认情况下,捕获组是贪婪的,他们会尽可能多地捕获,因为
+
表示一个或多个,所以它可以只匹配最后一个数字,将第一个数字留给
\S
。使用
使他们不贪婪:

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


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

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


确切地说,这是贪婪的,或者更确切地说,是懒惰的匹配。确切地说,这是贪婪的,或者更确切地说,是懒惰的匹配。确实有效。也谢谢你在这个特别点上的提醒。它确实有效。也谢谢你在这个特别点上的提醒。