2016-05-24 3 views
0

Я пытаюсь найти регги и пытался удалить специальные символы, такие как круглые скобки, скобки и т. Д. С номера телефона. Вместо того, чтобы получать первые 3 цифры (что я намеревался), я получаю это ['201', index: 0, input: '2014447777'] Почему это происходит?Regex - сопоставление только цифр, исключая специальные символы - не работает

function numbers(num){ 
return num.replace(/[^0-9]/g, "").match(/\d\d\d/); 

} 
numbers("(347)4448888"); 
+1

Каков ожидаемый выход? – AKS

+0

ожидаемый результат равен всего 347 (не как строка) – learningcoding

ответ

3

String#match возвращает

Массив, содержащий весь результат совпадения и любые скобки захватили согласованные результаты, или нулевое значение, если не было найдено.

Чтобы получить первые три цифры, используйте

return num.replace(/\D+/g, '').match(/\d{3}/)[0]; 
        ^^^    ^^^^^ ^^^ : Match all non-digits 
             ^^^^^ ^^^ : Match three digits and returns digits from the array. 
+0

Спасибо. Но почему я все равно получаю массив? – learningcoding

+0

Кроме того, вы можете объяснить, что вы подразумеваете под «null, если не было совпадений», потому что это случилось со мной, когда искал 1 письмо, и в случае, если не было буквы, она не вернула 0, но null и я 't понять, почему – learningcoding

+0

@learningcoding 'match' возвращает массив совпадений, как вы добавили в вопрос. Чтобы использовать значение по умолчанию, используйте 'return num.replace (/ \ D +/g, '') .match (/ \ d {3} /) [0] || 0; ' – Tushar

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