8. září 2026

Kotvy: začátek řetězce ^ a konec řetězce $

Znaky stříšky ^ a dolaru $ mají v regulárních výrazech speciální význam. Nazývají se „kotvy“.

Znak stříšky ^ má shodu na začátku textu a znak dolaru $ na konci.

Například otestujme, zda text začíná slovem Marie:

let řetězec1 = "Marie měla malé jehňátko";
alert( /^Marie/.test(řetězec1) ); // true

Vzor ^Marie znamená: „začátek řetězce a pak Marie“.

Obdobně můžeme pomocí sníh$ testovat, zda řetězec končí slovem sníh:

let řetězec1 = "jeho vlna byla bílá jako sníh";
alert( /sníh$/.test(řetězec1) ); // true

V těchto konkrétních případech bychom místo RV mohli použít řetězcové metody startsWith/endsWith. Regulární výrazy bychom měli používat pro složitější případy.

Testování úplné shody

Obě kotvy dohromady ^...$ se často používají k otestování, zda vzoru odpovídá celý řetězec. Například pro zjištění, zda uživatelský vstup je ve správném formátu.

Prověřme, zda řetězcem je čas ve formátu 12:34. Tedy: dvě číslice, pak dvojtečka a pak další dvě číslice.

V jazyce regulárních výrazů to je \d\d:\d\d:

let správnýVstup = "12:34";
let špatnýVstup = "12:345";

let rv = /^\d\d:\d\d$/;
alert( rv.test(správnýVstup) ); // true
alert( rv.test(špatnýVstup) ); // false

Zde musí shoda s \d\d:\d\d začínat hned na začátku textu ^ a pak musí okamžitě následovat jeho konec $.

Celý řetězec musí být přesně v tomto formátu. Pokud obsahuje nějakou odchylku nebo znak navíc, výsledkem je false.

Pokud je uveden příznak m, kotvy se chovají odlišně. Uvidíme to v příštím článku.

Kotvy mají „nulovou šířku“

Kotvy ^ a $ jsou testy. Mají nulovou šířku.

Jinými slovy, neodpovídají žádnému znaku, ale přimějí motor regulárních výrazů prověřit podmínku (začátek/konec textu).

Úlohy

Jaký řetězec odpovídá vzoru ^$?

Odpovídá mu jedině prázdný řetězec: začne a okamžitě skončí.

Tato úloha znovu předvádí, že kotvy nejsou znaky, ale testy.

Řetězec je prázdný "". Motor napřed prověří ^ (začátek vstupu), ano, je tam, a pak okamžitě konec $, ten je tam také. Proto nastane shoda.

Mapa tutoriálu

Komentáře

přečtěte si před komentováním…
  • Máte-li návrhy na zlepšení, vytvořte prosím issue na GitHubu nebo pull request místo komentáře.
  • Pokud v článku něčemu nerozumíte, napište prosím, čemu přesně a na kterém místě.
  • Pro vložení několika slov kódu použijte značku <code>, pro několik řádků je obalte značkou <pre>, pro více než 10 řádků vložte odkaz na pískoviště (plnkr, jsbin, codepen…)