2016-09-22 5 views
-1

У меня есть строка, которая может выглядеть следующим образом:Regexp синтаксического анализа строки

2d 
1m 
5h 

Я хочу, чтобы разобрать его и получить массив:

[2, 'd'] 
[1, 'm'] 
[5, 'h'] 

Я написал регулярное выражение:

var r = /^(\d)([mhd])$/; 
var res = r.exec("2m"); 
console.log(res); 

It выходы: ["2m", "2", "m"]

Как вы видите, первый элемент лишний. Как правильно писать?

+0

всего 2 символов, использование индекса в порядке – passion

+0

ли все ваши строки 2 символа, с первым быть числом, а второе - буквой? –

+0

@passion Считаете ли вы, что это будет намного быстрее? – user348173

ответ

1

Вы уже делаете это правильно. Просто нужно выбрать правильную часть с slice().

var r = /^(\d)([mhd])$/; 
var res = r.exec("2m").slice(1, 3); 
console.log(res); 
+0

'str.match (/ \ d + | [mhd]/g)' –

+0

@AvinashRaj: это соответствует только «2». – bitifet

+0

@bitfet вы добавили флаг g? –

1

js regex.exec даст целое совпадение как первый элемент массива результатов. Вы можете использовать индекс для получения группы catch.

0

var r = /^(\d)([mhd])$/; 
 
var res = r.exec("2m"); 
 
res = res.slice(1,3); 
 
console.log(res);

// Выход [ "2", "м"]