Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   regex(?:x) not work (https://javascript.ru/forum/misc/48989-regex-x-not-work.html)

Giden 24.07.2014 15:16

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". Заранее благодарен.

Pavel M. 24.07.2014 15:38

попробуйте так
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' тоже

MallSerg 24.07.2014 15:49

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

Aetae 24.07.2014 22:14

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)

Giden 25.07.2014 13:50

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

Giden 25.07.2014 13:50

Цитата:

Сообщение от MallSerg (Сообщение 322614)
http://www.regexr.com/
Новый аккаунт?

Угу


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