2014-12-04 2 views
0

У меня есть несколько строк, как это:Regex возвращает неопределенное значение с группой подчеркивания

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

мне нужно соответствовать номерам только с регулярным выражением, поэтому я попробовал эти 2 с регулярными выражениями JavaScript:

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

Выполняется exec, что дает правильный результат для -, но соответствует _, но возвращает undefined for the second named group. На самом деле первое регулярное выражение работает с любым символом, кроме _. Например, 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"] 

ответ

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

Try this.See демо.

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

Проблема с регулярным выражением является ^(\d+)\w*(?:_(\d+)\w*)?\.CSV$

       ^^^ 

Это \w* будет потреблять все, и вторая группа никогда не получит шанс прийти в play.Change \w в [a-zA-Z0-9] исключить из _ сопоставление, поскольку оно действует как разделитель здесь для вашей второй группы

Смежные вопросы