2012-04-05 2 views
1

Я думал ...Почему Regex Group возвращается?

при написании им (JS)

var t="1234ABC4321".match(/.*(ABC).*/) 

возвращается:

["1234ABC4321", "ABC"] 

я могу заменить , "ABC"] часть на (?:...)

Однако группы для: backreference, поэтому я могу ссылаться на них \1 позже ....

вопрос:

почему «ABC» возвращается как часть матчей? , если он понадобится для себя для последующей обратной ссылки, fine! но dont Сохраните его в своей коллекции!

Есть ли какая-либо логика (я уверен, что есть)?

ответ

2

Логика заключается в том, что метод match() проверяет, соответствует ли ваша строка регулярному выражению. Если он это делает, он возвращает вам часть строки, которая соответствует регулярному выражению. Если вы укажете группу с(), она также вернет группы.

Если ищет, чтобы удалить ABC из вашего использования строки:

var t="1234ABC4321".replace(/ABC/, ""); 
3

Я не уверен, что понимаю ваш вопрос, но при группировке первая группа, которую вы получаете, представляет собой целую строку, которая соответствует регулярному выражению. Если вы не хотите получать вторую группу (ABC), удалите скобки (( и )), так как они обозначают группы в регулярных выражениях, поэтому это регулярное выражение: /.*ABC.*/ должно дать вам 1 группу, являющуюся 1234ABC4321.