输入边界断言:^、$

基线 广泛可用

此功能已得到良好建立,并且可以在许多设备和浏览器版本上运行。它自以下时间起在所有浏览器中都可用 2015年7月.

**输入边界断言**检查字符串中当前位置是否为输入边界。输入边界是字符串的开头或结尾;或者,如果设置了 m 标志,则为行的开头或结尾。

语法

正则表达式
^
$

描述

^ 断言当前位置是输入的开头。$ 断言当前位置是输入的结尾。两者都是断言,因此它们不会消耗任何字符。

更准确地说,^ 断言左侧字符超出字符串范围;$ 断言右侧字符超出字符串范围。如果设置了 m 标志,则 ^ 也匹配如果左侧字符是 换行符 字符,并且 $ 也匹配如果右侧字符是换行符。

除非设置了 m 标志,否则 ^$ 断言只有在放置在模式的边界时才有意义,因为它们左侧或右侧的任何其他字符都必然会导致断言失败。

y 标志不会改变这些断言的含义——另请参阅 锚定粘性标志

示例

删除尾部斜杠

以下示例从 URL 字符串中删除尾部斜杠

js
function removeTrailingSlash(url) {
  return url.replace(/\/$/, "");
}

removeTrailingSlash("https://example.com/"); // "https://example.com"
removeTrailingSlash("https://example.com/docs/"); // "https://example.com/docs"

匹配文件扩展名

以下示例通过匹配文件扩展名来检查文件类型,文件扩展名始终位于字符串的末尾

js
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

匹配整个输入

有时您希望确保您的正则表达式匹配整个输入,而不仅仅是输入的子字符串。例如,如果您要确定字符串是否为有效的 标识符,则可以在模式的两端添加输入边界断言

js
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

此函数在执行代码生成(使用代码生成代码)时很有用,因为您可以将有效标识符与其他字符串属性(例如 点表示法 而不是 方括号表示法)区分开来

js
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;

规范

规范
ECMAScript 语言规范
# prod-断言

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅