2015-06-14 3 views
3

У меня есть такие строки, какJavascript Regex для извлечения числа

(123)abc 
defg(456) 
hijkl 
(999) 
7 

Я хочу, чтобы соответствовать этим строкам по одному с регулярным выражением, чтобы извлечь любое число из строки, где строка начинается с «('имеет число между, а затем a') ', за которым следуют ноль или более символов. Итак, в приведенных выше примерах я бы соответствовал 123 в первом случае, ничего во втором и третьем случаях, 999 в четвертом случае и ничего в пятом случае.

Я попробовал этот

var regex = new RegExp("^\((\d+)\)", "gm"); 
var matches = str.match(regex); 

Но матчи всегда выходит как нуль. Что я делаю не так?

Я пробовал это регулярное выражение по адресу regex101 и, похоже, работает, поэтому я не могу понять, почему код не работает.

+0

При использовании 'RegExp' конструктора, вы должны будете предоставить управляющие последовательности как для рисунка и строкового литерала -' нового RegExp ("^ \\ ((\\ d +) \\)" , "gm"). –

ответ

3

Вам нужно нажать результат захвата группы в массив, для этого используйте метод exec().

var str = '(123)abc\ndefg(456)\nhijkl\n(999)\n7' 
var re = /^\((\d+)\)/gm, 
matches = []; 

while (m = re.exec(str)) { 
    matches.push(m[1]); 
} 

console.log(matches) //=> [ '123', '999' ] 
3

Я не вижу ничего плохого в своем регулярном выражении, попробуйте этот код, сгенерированный из regex101:

var re = /^\((\d+)\)/gm; 
var str = '(123)abc\ndefg(456)\nhijkl\n(999)\n7'; 
var m; 

while ((m = re.exec(str)) !== null) { 
    if (m.index === re.lastIndex) { 
     re.lastIndex++; 
    } 
    // View your result using the m-variable. 
    // eg m[0] etc. 
} 

Working demo

Btw как jonathan lonowski отметил в своем комментарии, вы должны бежать обратный слэш при использовании RegExp:

new RegExp("^\\((\\d+)\\)", "gm") 
2

Вы можете использовать это регулярное выражение:

var regex = /^\((\d+)(?=\))/gm; 

и использовать Захваченные группа № 1

RegEx Demo

Использование регулярных выражений конструктора (обратите внимание на двойное экранирование):

var regex = new RegExp("^\\((\\d+)(?=\\))", "gm"); 
Смежные вопросы