輸入邊界斷言:^, $

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨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® 2026 語言規範
# prod-Assertion

瀏覽器相容性

另見