Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.07.2014, 15:16
Интересующийся
Отправить личное сообщение для Giden Посмотреть профиль Найти все сообщения от Giden
 
Регистрация: 22.05.2012
Сообщений: 14

regex(?:x) not work
Доброго времени суток. Пытаюсь разобраться с регулярками и прям на старте возникают проблемы с пониманием. Не могу понять как работает паттерн (?:x).
function content(){
       str = 'foo bar';
        var res = str.match(/(?:foo)\w*/);
        for (i = 0; i < res.length-1; i++) {
            console.log('res['+i+'] = '+res[i]);
        }
    }


Ничего не выводит. Нужно что вы выводил "bar". Заранее благодарен.
Ответить с цитированием
  #2 (permalink)  
Старый 24.07.2014, 15:38
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

попробуйте так
function content(){
        var str = 'foo bar';
        var res = str.match(/(?:foo) (\w*)/);
        for (i = 0; i < res.length; i++) {
            console.log('res['+i+'] = '+res[i]);
        }
    }

res[0] - это полностью совпавшая строка
res[1] - это первая скобка

если бы вместо (?:foo)
написать просто (foo), то в результат вошло бы и 'foo' тоже
Ответить с цитированием
  #3 (permalink)  
Старый 24.07.2014, 15:49
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

http://www.regexr.com/
Новый аккаунт?

Последний раз редактировалось MallSerg, 24.07.2014 в 15:58.
Ответить с цитированием
  #4 (permalink)  
Старый 24.07.2014, 22:14
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,514

str = 'foo bar';
var res = str.match(/(?:foo)\w*/);
alert(res)

"(?:foo)" - foo в незапоминающих скобках. В данном случае, поскольку к скобкам не добавлены никакие множители это равносильно просто "foo".
"\w*" - 0 и более раз повторённый символ из диапазона [a-zA-Z0-9_]. В данном случае поскольку после foo идёт сразу пробел, получается вариант с 0 символов.
В результате находит только "foo".

Чтобы выводил bar если известно только foo:
str = 'foo bar';
var res = str.match(/foo\s+(\w+)/);
alert(res[1])
alert(res)
__________________
29375, 35

Последний раз редактировалось Aetae, 24.07.2014 в 22:16.
Ответить с цитированием
  #5 (permalink)  
Старый 25.07.2014, 13:50
Интересующийся
Отправить личное сообщение для Giden Посмотреть профиль Найти все сообщения от Giden
 
Регистрация: 22.05.2012
Сообщений: 14

Ребята, а расскажите по подробней про это выражение, если можно с примерами, а то туториалах как то размыто и без примеров.
Заранее благодарен.
Ответить с цитированием
  #6 (permalink)  
Старый 25.07.2014, 13:50
Интересующийся
Отправить личное сообщение для Giden Посмотреть профиль Найти все сообщения от Giden
 
Регистрация: 22.05.2012
Сообщений: 14

Сообщение от MallSerg Посмотреть сообщение
http://www.regexr.com/
Новый аккаунт?
Угу
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JavaScript Developer (remote work) HermitAlex Работа 12 29.10.2013 15:09
why this slice.call([1,2,3]) doesn't work? thx belbek Общие вопросы Javascript 1 21.05.2012 17:29
dropdownlist selected value don't work coder13aa Общие вопросы Javascript 5 03.10.2011 00:41
setAttribute dont work in IE7 february Events/DOM/Window 4 14.08.2008 19:51