首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式的结果不像预期的那样

正则表达式的结果不像预期的那样
EN

Stack Overflow用户
提问于 2018-03-24 03:48:07
回答 2查看 36关注 0票数 1

我有以下字符串:

代码语言:javascript
复制
string = 1231231223123131_FILE_NAME.EXTENSION.OTHEREXTENSION

以及以下正则表达式:

代码语言:javascript
复制
string.match(/^\d+_([^.]+\.[^.]+)/)[1]

正则表达式返回:

代码语言:javascript
复制
 => FILE_NAME.EXTENSION

虽然我了解到^\d+_表示的是多个数字中的一个,后面跟着一个下划线,但我的困惑是在捕获组中。特别是为什么^.+似乎在句点之前返回一个或多个字符,然后包括句点,但不包括第二个句点和第二个^.+实例。

当您移除第一个^.+时,这个正则表达式组合更加令人困惑,因为它还返回.OTHEREXTENSION。

根据我的理解,在圆括号中使用胡萝卜^。意思是排除跟在后面的任何东西。那么,为什么在这种情况下,它包括到第一个句点之前和之后的所有字符?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-24 04:12:40

捕获组表示任何不是.的字符,然后是单个.,然后是另一组非.字符。结果中的.不是来自第一个[^.]+,而是来自后续的\.,并且仍然在捕获组中。

FILE_NAME.EXTENSION符合这一标准。FILE_NAME匹配第一个字符类1或更多次。后面跟着一个与\.匹配的点,然后单词EXTENSION会遇到第二个字符类一次或多次。当它到达第二个点时,捕获组就结束了,因为正则表达式不包含与第二个.匹配的任何内容。

票数 1
EN

Stack Overflow用户

发布于 2018-03-24 04:14:14

在您的正则表达式中,您有[^.]+\.[^.]+

[^.]+代表一个或多个与FILE_NAME匹配的非句点字符,并在到达句点.时停止。

\.匹配单个句点.,它会这样做(在FILE_NAME之后,但在EXTENSION.OTHEREXTENSION之前)。

下一个[^.]+再次匹配一个或多个非周期字符,即EXTENSION,并在到达句点.时再次停止。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49461016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档