Как в регулярных выражениях обозначается "может быть а может и не быть"?

программирование php JavaScript регулярные выражения

Пример: составил регулярку /(var|Integer|Number|Object|Boolean)?\s*\w+\s*(=\s*"?.*"?\s*)?;/
Она должна искать все переменные, объявленные в javascript коде. Но в итоге получается так что какие то куски она находит несколько раз. К примеру в коде:

Integer i;
var a = d;
d = 0;

Оно находит:

Всего совпадений 3

1 : Integer i;
1.1 : Integer
2 : var a = d;
2.1 : var
2.2 : = d
3 : d = 0;
3.1 :
3.2 : = 0

Какие то подсовпадения >_<
Ответы:
1, 2 и 3 - это совпадения всего шаблона.
1.1, 2.1, 2.2 и т.д. - это совпадения групп, т.е. содержимого круглых скобок вашего шаблона.
Это нормальное поведение. Чтобы такого не было, можно использовать пассивные группы: вместо (...) пишите (?:...)
Но если они не мешают получить нужный результат, то это ни к чему.


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.