К обсуждениям

Safari Technology Preview 251: RegExp теряет якорь ^ внутри пустого group

Редакция VOne Технологии

Safari Technology Preview 251: RegExp теряет якорь ^ внутри пустого group. Локальная диагностическая процедура, truth table «pattern × input × empty path × expected index × actual index», отрицательный контроль и безопасный критерий остановки без production-данных.

Короткий ответ и точная граница симптома

Для запроса «как проверить regexp anchor внутри group который может match empty в Safari Technology Preview 251» проверяется ровно одна ситуация: регулярное выражение с ^ внутри группы, способной совпасть с пустой строкой, ошибочно находит match не в начале input. Ненулевой index при обязательном ^ — reproduced. null там, где match ожидается в начале, требует отдельной проверки самого pattern. Это вывод только для Safari Technology Preview 251 и минимального примера; стабильный Safari, другие браузеры и конкретный сайт требуют отдельного прогона. Ключевой риск ложного вывода: Флаг m меняет смысл ^; он фиксируется отдельно и не добавляется в основной тест. Поэтому ожидаемое состояние формулируется до действия, а неизвестный результат остаётся unknown.

Доказательная опора: Release 251 и 317981@main

Официальные release notes WebKit опубликованы 26 августа 2026 года и прямо сообщают: регулярное выражение с ^ внутри group, допускающей empty match, теперь корректно остаётся anchored. Пункт ведёт на 317981@main, то есть на первичную запись изменения в WebKit. Связка release page и commit подтверждает наличие технического изменения, но не его распространённость, поисковую частоту или результат на пользовательском проекте. Google News и публичные community-страницы остаются leads: их сниппеты, голоса и отдельные ответы не используются как доказательство причины.

Диагностический паспорт: truth table «pattern × input × empty path × expected index × actual index»

До воздействия заполните поля: точный pattern, flags, input, expected index, actual match/index, lastIndex и результат эквивалентного упрощённого pattern. Рабочий артефакт — truth table «pattern × input × empty path × expected index × actual index». Отрицательный или сравнительный контроль: вариант без empty-capable branch отделяет обычную работу ^ от граничной структуры группы. К каждому наблюдению добавляются точная сборка TP 251, время, zoom и короткие expected/observed; сведения из памяти не подставляются. Не сохраняются имя профиля, IP, cookie, токены, Authorization, локальные пути, полные URL с приватными query и содержимое рабочих документов. Если обязательное поле нельзя измерить безопасно, статья предписывает остановку, а не догадку.

Пошаговый canary, контроль и полный возврат

На отдельной локальной странице нужно составить три короткие ASCII-строки с возможным совпадением в начале и середине, выполнять новый RegExp для каждого кейса, затем сравнить с явно anchored control. Сначала снимается baseline, затем меняется только одна названная переменная и выполняется один заранее определённый ввод. После записи результата применяется контроль: вариант без empty-capable branch отделяет обычную работу ^ от граничной структуры группы. Затем исходное состояние полностью восстанавливается и baseline измеряется ещё раз. Прогон получает invalid test, если rollback не вернул исходные значения, вмешалось расширение, не пришло доверенное пользовательское событие или среда не предоставляет нужный API/UI. В таком случае не добавляют второе изменение и не объявляют браузер неисправным.

Развилка решения, красная линия и пакет воспроизведения

Ненулевой index при обязательном ^ — reproduced. null там, где match ожидается в начале, требует отдельной проверки самого pattern. Практический результат хранится как truth table «pattern × input × empty path × expected index × actual index». Статус reproduced ставится только после одинакового повторения и успешного rollback; not reproduced относится лишь к текущему fixture; unsupported и environment-blocked не смешиваются с unknown. Красная линия: не использовать пользовательские строки, catastrophic backtracking и глобальный RegExp между независимыми прогонами. Для передачи в поддержку достаточно версии, минимального HTML/CSS/JS, таблицы expected/observed, контрольного результата и ссылки на 317981@main. Перед отправкой удаляются идентификаторы и реальные данные. Материал не обещает исправление, индексацию, позицию или универсальное поведение другой версии Safari.

Материал подготовлен редакцией VOne с помощью ИИ; дата, первичный WebKit commit, техническая граница, контроль, обратимость, privacy-stop и роль community lead постатейно проверены 29 августа 2026 года.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.