如何用JavaScript匹配恰好包含1个下划线的文件名?
正则表达式正确性分析
你的正则表达式[a-zA-Z\d]+_[0-9\d]不正确,问题如下:
- 字符范围限制过严:示例中合法文件名的name部分包含空格、点号(如
Prof. Leonel Messi),但你的正则只允许字母和数字,无法匹配这类合法内容。 - 未覆盖完整文件名:该正则仅匹配了下划线前后的片段,没有对整个文件名(包括扩展名)进行匹配,会漏掉后缀部分。
- id匹配不完整:正则中
[0-9\d]等价于[0-9],只能匹配单个数字,但示例中的id是多位数字(如300001),无法满足需求。 - 未限制下划线数量:该正则没有确保文件名中恰好只有一个下划线,存在多个下划线的文件也可能被部分匹配。
正确的正则表达式
根据你的需求,匹配格式为name_id.extnames(仅含1个下划线,name为任意不含下划线的字符串,id为数字,extnames为扩展名)的正则应为:
^[^_]+_\d+\.\w+$
规则说明:
^:匹配文件名开头[^_]+:匹配name部分,任意不含下划线的字符(长度至少1)_:匹配唯一的下划线\d+:匹配id部分,至少一位数字\.:匹配扩展名前的点号(转义后表示实际的点)\w+:匹配扩展名,至少一位字母/数字/下划线$:匹配文件名结尾
如果需要支持带多个点的扩展名(如file.tar.gz),可以将扩展名部分调整为\w+(\.\w+)*,正则变为:
^[^_]+_\d+\.\w+(\.\w+)*$
内容的提问来源于stack exchange,提问作者positive developer
相关产品推荐
相关产品推荐

