Буферные граничные утверждения: \A, \z, \Z
Экспериментально: Это экспериментальная технология
Внимательно проверьте таблицу совместимости браузеров перед использованием этого в продакшене.
Экспериментально: Это экспериментальная технология
Внимательно проверьте таблицу совместимости браузеров перед использованием этого в продакшене.
Буферное граничное утверждение проверяет, находится ли текущая позиция в строке строго в начале или конце всей строки (\Z также разрешает конечный перевод строки), независимо от наличия флага m (который изменяет значения ^ и $ входных граничных утверждений). Оно поддерживается только в режиме с поддержкой Unicode.
Синтаксис
\A \z \Z
Описание
\A утверждает, что текущая позиция находится в начале всей строки. \z утверждает, что текущая позиция находится в конце всей строки. \Z аналогичен \z, но также соответствует позиции перед терминатором строки или последовательностью \r\n (CRLF) в конце строки. Все они являются утверждениями, поэтому они не потребляют никаких символов.
Точнее, \A утверждает, что символ слева находится за пределами строки; \z утверждает, что символ справа находится за пределами строки; \Z эквивалентен (?=(?:\r?\n?|[\u{2028}\u{2029}]?)\z).
Эти утверждения имеют смысл только тогда, когда слева или справа от них не ожидается никаких символов. Например, f\Ao никогда не совпадает, потому что \A не может одновременно находиться в начале строки и иметь символ слева от себя.
Утверждения \A и \z полезны только при использовании флага m. Без m они ведут себя точно так же, как ^ и $. Если ваш шаблон должен совпадать только с началом или концом всей строки или строки (и никогда со смешанным вариантом), рекомендуемый подход — по-прежнему использовать утверждения ^ и $, и при необходимости установить флаг m, поскольку они более широко поддерживаются, чем буферные граничные утверждения. Если вам нужно сопоставить оба типа границ в одном шаблоне, вы можете использовать модификаторы для включения или отключения флага m в различных частях шаблона, но использование этих escape-последовательностей делает код намного более читабельным.
Примеры
Смешивание буферных и входных граничных утверждений
Предположим, у вас есть шаблон, который должен совпадать либо в начале всей строки, либо в начале одной строки. Вы можете включить m, чтобы использовать ^ для второй, а затем использовать \A для первой (вам также нужно включить u, чтобы использовать \A).
Этот пример сопоставляет строчные комментарии на отдельных строках, которые могут быть hashbang в начале файла или строчными комментариями на любой строке. Он не сопоставляет строчные комментарии в конце строки, содержащей код.
function findLineComments(code) {
// Matches the hashbang syntax: #!... (which is only valid at start of file)
// and line comment syntax: //... (which is valid everywhere)
const pattern = /\A#!.*|^\s*\/\/.*/gmu;
return code.match(pattern);
}
const program = `#!/usr/env/node
function findLineComments(code) {
// Matches the hashbang syntax: #!... (which is only valid at start of file)
// and line comment syntax: //... (which is valid everywhere)
const pattern = /\\A#!.*|^\\/\\/.*/gmu;
return code.match(pattern);
}
`;
console.log(findLineComments(program));
// [
// '#!/usr/env/node',
// ' // Matches the hashbang syntax: #!... (which is only valid at start of file)',
// ' // and line comment syntax: //... (which is valid everywhere)'
// ]
Другим основным сценарием использования буферных граничных утверждений является ситуация, когда вы не можете изменить флаги, например, при поиске регулярных выражений в текстовых редакторах. В этих случаях по умолчанию обычно включен m, поэтому вам нужно использовать \A и \z, чтобы "отказаться".
Сопоставление конца файла, но с разрешением необязательного конечного перевода строки
Файловые форматы часто допускают необязательный перевод строки в конце файла. Если вы хотите сопоставить шаблон конца файла, допускающий конечный перевод строки, вы можете использовать \Z. Эта функция полезна с флагом m или без него.
const endOfPDF = /%%EOF\Z/u;
console.log(endOfPDF.test("%%EOF")); // true
console.log(endOfPDF.test("%%EOF\n")); // true
console.log(endOfPDF.test("%%EOF\r\n")); // true
console.log(endOfPDF.test("%%EOF\n\n")); // false
console.log(endOfPDF.test("%%EOF\nsomething")); // false
Спецификации
Совместимость с браузерами
| Настольные | Мобильные | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | Bun | Deno | Node.js | |
buffer_boundary_assertion |
Нет |
Нет |
preview |
Нет |
preview |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
См. также
- Руководство по утверждениям
- Регулярные выражения
- Входное граничное утверждение:
^,$ - Граница слова:
\b,\B - Утверждение просмотра вперед:
(?=...),(?!...) - Утверждение просмотра назад:
(?<=...),(?<!...)
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Buffer_boundary_assertion