Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.03.2013, 09:23
Новичок на форуме
Отправить личное сообщение для Santehnick Посмотреть профиль Найти все сообщения от Santehnick
 
Регистрация: 25.07.2012
Сообщений: 6

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

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


Я явно указываю, что требуется сохранить в качестве результата, то есть в массиве должно лежать smile,smile1, но скобки, как будто игнорируются, результат получается :smile:,:smile1: в чем мой промах? Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 21.03.2013, 09:33
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Это особенность флага g.
Ответить с цитированием
  #3 (permalink)  
Старый 21.03.2013, 09:56
Новичок на форуме
Отправить личное сообщение для Santehnick Посмотреть профиль Найти все сообщения от Santehnick
 
Регистрация: 25.07.2012
Сообщений: 6

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

тоже беда, результат ':smile:,smile' где второй теряется неизвестно.
Ответить с цитированием
  #4 (permalink)  
Старый 21.03.2013, 10:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Santehnick,
var sm = ':smile: :smile1:'.match(/[^:\s]+/g);
alert(sm);
Ответить с цитированием
  #5 (permalink)  
Старый 21.03.2013, 10:13
Новичок на форуме
Отправить личное сообщение для Santehnick Посмотреть профиль Найти все сообщения от Santehnick
 
Регистрация: 25.07.2012
Сообщений: 6

Сообщение от рони Посмотреть сообщение
Santehnick,
var sm = ':smile: :smile1:'.match(/[^:\s]+/g);
alert(sm);
Спасибо конечно, но не пойдет, в строке кроме кода смайла, естественно может находится и обычный текст, тогда он тоже попадет в результат, чего быть не должно.
Ответить с цитированием
  #6 (permalink)  
Старый 21.03.2013, 11:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

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);

Последний раз редактировалось рони, 21.03.2013 в 11:08.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Match() для запроса $(...) Grammka Общие вопросы Javascript 4 16.10.2012 22:10
Возможно ли как-то структурировать массив match? dump Общие вопросы Javascript 1 29.07.2012 12:19
Функция Preg match adik7960 Общие вопросы Javascript 13 06.05.2012 22:02
Почему match() возвращает значение undefined yolka Events/DOM/Window 2 24.04.2010 15:09
Global, Button. Необходима Помощь. Nazv Общие вопросы Javascript 1 12.12.2008 17:45