2016-02-03 4 views
0

В ChromeРазличаются между /{.*?}/g. и /{(.*?)}/g

/{.*?}/g.exec('aaa{eee}uuuu') 

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

["{eee}"] 

, тогда как

/{(.*?)}/g.exec('aaa{eee}uuuu') 

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

["{eee}", "eee"] 

Второй результат - то, что я ожидал. Почему не первый код возвращает голую строку «{eee}»?

+3

Поскольку у захватили его во втором случае с помощью '()' а не в первом случае – vks

+3

Почему вы ожидали этого результата, если вы не разместили [ваши группы захвата] (http://www.regular-expressions.info/brackets.html) в своем выражении? – Bergi

+0

Я не знал слова и понятия «захват». Большое спасибо. – Nigiri

ответ

1

Потому что в первом регулярном выражении вы не использовали фигурные скобки. скобки используются для группировки строки, но во втором регулярном выражении вы использовали фигурные скобки, которые группируют «eee» в соответствии с вашим вводом.

Первое регулярное выражение возвращает массив только с одним элементом. но во втором выражении он возвращает массив с 2-мя элементами. [0] => целая строка, [1] => строка, согласованная внутри фигурных скобок. Если больше скобки используются, то он будет возвращать [2] => ..., [3] => ... и т.д.

относятся: JavaScript Regex Global Match Groups

+0

См. Http://stackoverflow.com/questions/19913667/javascript-regex-global-match-groups – Vegeta

+0

Итак, должно ли первое регулярное выражение вывести ошибку? – Nigiri

+0

он не будет вызывать ошибку, но возвращает массив только с одним элементом. но во втором выражении он возвращает массив с 2-мя элементами. [0] => целая строка, [1] => строка, согласованная внутри фигурных скобок. Если используется больше фигурных скобок, оно вернет [2] => ..., [3] => ... и т. Д. – Vegeta

Смежные вопросы