我有一些像这样的字符串:
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/