Node.js v18.16.1正则表达式匹配异常问题咨询
问题分析与解决
这不是Node.js的Bug,是你的正则表达式逻辑不符合预期导致的。
原因拆解
你的正则表达式/\d*?,\d*?,.*?\./的匹配逻辑是:
\d*?:非贪婪匹配0个或多个数字(重点是允许匹配0个数字)- 接着匹配逗号
, - 再非贪婪匹配0个或多个数字
\d*? - 接着匹配逗号
, - 最后非贪婪匹配任意字符直到遇到
.
在目标字符串'Bub,160,20221219_120814672_iOS.png'中,存在完全符合该模式的子串:
\d*?匹配0个数字(跳过前面的Bub字符),匹配第一个逗号,\d*?匹配160(因后续需要匹配逗号,非贪婪模式会回溯匹配足够数字以满足规则)- 匹配第二个逗号
, .*?匹配到第一个.为止,即20221219_120814672_iOS- 最后匹配
.
所以正则会找到该子串,返回true。
修正方案
如果你想验证整个字符串是否符合「数字,数字,任意字符.后缀」的格式,需要给正则加上开头和结尾锚定,同时把\d*?改为\d+(确保匹配至少一个数字,而非0个):
/^\d+,\d+,.*\.$/
用这个正则测试目标字符串'Bub,160,20221219_120814672_iOS.png'会返回false,符合你的预期。
内容的提问来源于stack exchange,提问作者user3805852
相关产品推荐
相关产品推荐

