輸入邊界斷言:^, $
輸入邊界斷言檢查字串中的當前位置是否是輸入邊界。輸入邊界是字串的開頭或結尾;或者,如果設定了 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 |
瀏覽器相容性
載入中…