Opera 10 RegExp

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

Доброго времени суток.
Столкнулся с проблемой некорректной обработки регулярных выражений в браузере Opera 10

Например -
alert(/(t+){2}/.test('tt'));

IE6,IE8: true
Firefox: true
Safari: true
Chrome: true
Opera9: true

Opera10: false


Как с этим бороться - ума не приложу.
Есть ли какое-то решение для этой порблемы?
Заранее огромное спасибо всем!
Ответы:
ага, я знал, что они там поломают что-то
вообще-то шаблон довольно бессмысленный в примере, потому что плюс - жадный по умолчанию
javascript:alert(/(t+?){2}/.test('tt') + " а так - нежадный")
как кошерно обрабатывать не знаю, надо вчитываться в доку
если интересно - можно обсудить факт кошерности в сети EFNet на канале #javascript
ну и по итогам написать гневное или не очень письмо в Opera Software ASA
явный баг оперы. сам по себе регекс не самый красивый, но очевидно, что "tt" должна матчить выражение "две группы по 1 или более t".
как правильно заметил bungholio, баг скорее всего в неправильной обработке "жадности" плюса - сожрав все t в первой группе, на вторую и последующие уже не остаётся. в этой ситуации pcre делает backtracking, т.е. начинает отходить назад и компенсировать "жадность" плюса.
баг надо репортить, но регекс всё равно переписывать, он кривой, хотя и корректный.


15 лет назад

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

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

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