Ответ 1
Октальная escape-последовательность в RegExp
Широкое применение этого предложения (которое также представлено в спецификации ECMAScript 5.1, раздел 7.8.5), заключается в предоставлении восьмеричной escape-последовательности для конструктора RegExp.
/a\1b/.test("a\u0001b");
/a\11b/.test("a\tb");
Грамматика по умолчанию для RegExp (как описано в разделе 15.10.1 ES5.1 или Раздел 21.2.1 ES6) не поддерживает восьмеричную escape-последовательность и любую десятичную escape-последовательность, значение которой больше, чем количество захваченных групп, вызывает СинтаксисError. Тем не менее, многие браузеры (даже старые версии) расширяют грамматику RegExp для поддержки восьмеричной escape-последовательности и оценивают 2 строки кода выше true
.
Начиная с ES6, Приложение B, которое раньше было информативным приложением в спецификациях ES3 и ES5.1, превращается в нормативное приложение, для чего требуется веб-браузер, чтобы поддерживать восьмеричную escape-последовательность по соображениям совместимости (не-веб-браузеры могут выбирать для реализации по умолчанию).
В то время как предыдущие версии ECMAScript ссылались на поддержку восьмеричной escape-последовательности, это было только для числовых и строковых литералов. Обратно-совместимый RegExp впервые описывает в раздел B.1.4 ES6, который изменяет семантику и синтаксис RegExp для шаблонов BMP для включения поддержка восьмеричной escape-последовательности, среди других функций.
Непревзойденные закрывающие скобки ]
и квантификатор без диапазона с помощью {}
Другим распространенным расширением (как проверено на Firefox 38, Chrome 43 и IE9) является ослабление грамматики, чтобы позволить непревзойденные закрывающие скобки ]
и последовательности, которые не являются квантованным номером, и интерпретировать их как литературные строки.
/^][[]]$/.test("][]"); // Tokens: ^ ] [[] ] $
/^{56, 67}$/.test("{56, 67}"); // Extra space
Аналогично восьмеричной escape-последовательности, грамматика по умолчанию RegExp (раздел 15.10.1 из ES5.1 или раздел 21.2.1 ES6) не позволяет {
, }
, ]
быть Atom, поскольку эти символы исключаются из производства PatternCharacter.
Грамматика в Раздел B Приложения B.1.4 ES6 также расширяется для интерпретации последовательностей кванторов без диапазона (последовательности, которые не сопоставить грамматику QuantifierPrefix) как литеральную строку, через Atom [U]:: PatternCharacter production.
Тем не менее расширенная грамматика не допускает непревзойденного закрытия ]
, поскольку и PatternCharacter, и PatternCharacterNoBrace все еще запрещают ]
.