javascript - 正则表达式返回带有下划线组的未定义

标签 javascript regex

我有一些像这样的字符串:

123a-124b.csv
123a_124b.csv
123-124b.csv
123_124.csv

我只需要使用正则表达式来匹配数字,因此我使用 javascript 尝试了这 2 个正则表达式:

/^(\d+)\w*(?:.(\d+)\w*)?\.CSV$/i
/^(\d+)\w*(?:[-|_](\d+)\w*)?\.CSV$/i

对此运行 exec 会给出 - 的正确结果,但 _ 匹配,但对于第二个命名组返回 undefined 。事实上,第一个正则表达式适用于除 _ 之外的任何字符。例如 123a=123b.csv 工作正常。

知道出了什么问题吗?

更多示例输出:

var TEST = /^(\d+)\w*(?:.(\d+)\w*)?\.CSV$/i;
> undefined
TEST.exec('123a_123b.csv')
> ["123a_123b.csv", "123", undefined]
TEST.exec('123a+123b.csv')
> ["123a+123b.csv", "123", "123"]
TEST.exec('123a=123b.csv')
> ["123a=123b.csv", "123", "123"]
TEST.exec('123a?123b.csv')
> ["123a?123b.csv", "123", "123"]

最佳答案

^(\d+)[a-zA-Z0-9]*(?:.(\d+)\w*)?\.CSV$

试试这个。查看演示。

http://regex101.com/r/yR3mM3/44

您的正则表达式的问题是 ^(\d+)\w*(?:_(\d+)\w*)?\.CSV$

                               ^^^  

这个\w*会消耗一切,第二组将永远没有机会发挥作用。将\w更改为[a-zA- Z0-9]_ 从匹配中排除,因为它在此处充当第二组的分隔符

关于javascript - 正则表达式返回带有下划线组的未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27289981/

相关文章:

anchor 标签的 PHP 正则表达式匹配

javascript - 用javascript检查路径名是否有 "#"

javascript - Protractor - 单击表格中的按钮

regex - 如何在oracle(pl/sql)中转义字符串中的特殊字符

php - 如何将换行符/换行符内爆到空格?

javascript - 使用可选组获取最短匹配的问题

javascript - Reactjs 如何从多个 url 获取数据?

javascript - 使用 javascript 将视频源放入 HTML5 视频播放器

javascript - 声明变量 JavaScript 的性能影响

c# - 基于模式的更智能的字符串替换