2015-01-29 4 views
-1

Почему это:Javascript Regex Capture

var string = "apple:8080"; 
var reg = /\w*:(\d*)/; 
console.log(reg.exec(string).toString()); 

производить это:

apple:8080,8080 

Все, что я хочу 8080. Я не понимаю, почему apple: выводится вообще. Мне нужно зафиксировать число после двоеточия.

ответ

1

Вам нужно указать номер индекса группы, чтобы получить строку, хранящуюся в определенном индексе. По умолчанию .exec функция выплескивает как совпадения, так и захваты. Так что вы получили, apple:8080 матч и 8080 захват.

> var string = "apple:8080"; 
> var reg = /\w*:(\d*)/; 
> console.log(reg.exec(string)[1].toString()); 
8080 

Обновление:

Добавить дополнительное время цикла в-случае более чем одной подстроки был подобран.

var re = /\w*:(\d*)/g; 
var str = 'apple:8080 orange:8000'; 
var m; 
while ((m = re.exec(str)) != null) { 
    console.log(m[1]); 
} 

Выход:

8080 
8000 
+0

Хорошо, но что, если строка имеет несколько "\ W +: \ D +" слов. Как получить доступ к захвату для каждого матча? – fvrghl

+0

см. Мое обновление ... –