Утверждение границ ввода: ^, $
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Утверждение границ ввода проверяет, является ли текущая позиция в строке границей ввода. Границей ввода является начало или конец строки; или, если установлен флаг m, начало или конец строки.
Примечание: Чтобы сопоставить начало и конец всей строки в режиме m, используйте утверждения границ буфера \A, \z и \Z.
Синтаксис
^ $
Описание
^ утверждает, что текущая позиция является началом ввода. $ утверждает, что текущая позиция является концом ввода. Оба являются утверждениями, поэтому они не потребляют никаких символов.
Точнее, ^ утверждает, что символ слева находится за пределами строки; $ утверждает, что символ справа находится за пределами строки. Если установлен флаг m, ^ также совпадает, если символ слева является символом разделителя строки, а $ также совпадает, если символ справа является разделителем строки.
Если не установлен флаг m, эти утверждения имеют смысл только тогда, когда слева или справа от них не ожидается никаких символов. Например, f^o никогда не совпадает, потому что невозможно, чтобы ^ находился одновременно в начале строки и имел символ слева.
Эти утверждения не изменяют места совпадений, когда используется флаг y — см. также заякоренный липкий флаг.
Примеры
Удаление конечных слэшей
Следующий пример удаляет конечные слэши из строки URL:
function removeTrailingSlash(url) {
return url.replace(/\/$/, "");
}
removeTrailingSlash("https://example.com/"); // "https://example.com"
removeTrailingSlash("https://example.com/docs/"); // "https://example.com/docs"
Сопоставление расширений файлов
Следующий пример проверяет типы файлов путем сопоставления расширения файла, которое всегда находится в конце строки:
function isImage(filename) {
return /\.(?:png|jpe?g|webp|avif|gif)$/i.test(filename);
}
isImage("image.png"); // true
isImage("image.jpg"); // true
isImage("image.pdf"); // false
Сопоставление всего ввода
Иногда требуется убедиться, что ваше регулярное выражение соответствует всему вводу, а не только его подстроке. Например, если вы определяете, является ли строка допустимым идентификатором, вы можете добавить утверждения границ ввода к обоим концам шаблона:
function isValidIdentifier(str) {
return /^[$_\p{ID_Start}][$_\p{ID_Continue}]*$/u.test(str);
}
isValidIdentifier("foo"); // true
isValidIdentifier("$1"); // true
isValidIdentifier("1foo"); // false
isValidIdentifier(" foo "); // false
Эта функция полезна при генерации кода (codegen), поскольку допустимые идентификаторы можно использовать иначе, чем другие строковые свойства, например, точечная нотация вместо скобочной нотации:
const variables = ["foo", "foo:bar", " foo "];
function toAssignment(key) {
if (isValidIdentifier(key)) {
return `globalThis.${key} = undefined;`;
}
// JSON.stringify() escapes quotes and other special characters
return `globalThis[${JSON.stringify(key)}] = undefined;`;
}
const statements = variables.map(toAssignment).join("\n");
console.log(statements);
// globalThis.foo = undefined;
// globalThis["foo:bar"] = undefined;
// globalThis[" foo "] = undefined;
Спецификации
Совместимость с браузерами
| Desktop | Mobile | Server | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
input_boundary_assertion |
1 |
12 |
1 |
5 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
См. также
- Руководство по утверждениям
- Регулярные выражения
- Утверждение границ буфера:
\A,\z,\Z - Утверждение границ слова:
\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/Input_boundary_assertion