Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   match global (https://javascript.ru/forum/misc/36599-match-global.html)

Santehnick 21.03.2013 09:23

match global
 
Добрый день, подскажите что не так, есть такой код

var sm = ':smile: :smile1:'.match(/:([a-z0-9]+):/g);
alert(sm);


Я явно указываю, что требуется сохранить в качестве результата, то есть в массиве должно лежать smile,smile1, но скобки, как будто игнорируются, результат получается :smile:,:smile1: в чем мой промах? Спасибо.

danik.js 21.03.2013 09:33

Это особенность флага g.

Santehnick 21.03.2013 09:56

Ну хорошо, есть ведь наверняка какой-то способ добиться нужного мне результата? Пробую
var sm = /:([a-z0-9]+):/g.exec(':smile: :smile1:');

тоже беда, результат ':smile:,smile' где второй теряется неизвестно.

рони 21.03.2013 10:02

Santehnick,
var sm = ':smile: :smile1:'.match(/[^:\s]+/g);
alert(sm);

Santehnick 21.03.2013 10:13

Цитата:

Сообщение от рони (Сообщение 241811)
Santehnick,
var sm = ':smile: :smile1:'.match(/[^:\s]+/g);
alert(sm);

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

рони 21.03.2013 11:06

Santehnick,
если двоеточие неиспользуется больше то можно так
var sm = ' test :smile: :smile1: test'.match(/([^:\s]+)(?=:)/g);
alert(sm);

иначе так ...
var reg = /:([^:\s]+):/g;
var str = "test: :smile: :smile1: :test";
var sm = [], arr= [];
while ((arr = reg.exec(str))!=null)
{
  sm.push(arr[1])
}
alert(sm);


Часовой пояс GMT +3, время: 23:04.