کاراکترهای ^
و $
معنای خاصی در یک regexp دارند. به آنها “anchor” (به معنی لنگر) می گویند.
^
در ابتدای متن و $
در پایان متن مطابقت دارد.
به عنوان مثال، بیایید آزمایش کنیم که آیا متن با Mary
شروع می شود یا خیر:
let str1 = "Mary had a little lamb";
alert( /^Mary/.test(str1) ); // true
الگوی ^Mary
یعنی: “رشته شروع میشود و سپس کلمه Mary ظاهر میشود”.
مشابه این، میتوانیم با استفاده از snow$
آزمایش کنیم که آیا رشته به snow
ختم میشود:
let str1 = "its fleece was white as snow";
alert( /snow$/.test(str1) ); // true
در این موارد خاص، میتوانیم به جای آن از متدهای مختص به رشتهها به نام startsWith/endsWith
استفاده کنیم. برای تست های پیچیده تر باید از عبارات منظم استفاده شود.
آزمایش یک انطباق کامل
هر دو anchor یعنی $...^:pattern
با هم اغلب برای آزمایش اینکه آیا یک رشته کاملاً با الگو مطابقت دارد یا نه استفاده می شود. به عنوان مثال، برای بررسی اینکه آیا ورودی کاربر در قالب مناسب است یا خیر.
بیایید بررسی کنیم که آیا یک رشته زمان در قالب 12:34
است یا خیر. یعنی: دو رقم، سپس یک دونقطه، و سپس دو رقم دیگر.
در زبان عبارات با قاعده به صورت \d\d:\d\d
است:
let goodInput = "12:34";
let badInput = "12:345";
let regexp = /^\d\d:\d\d$/;
alert( regexp.test(goodInput) ); // true
alert( regexp.test(badInput) ); // false
در اینجا تطبیق \d\d:\d\d
باید دقیقاً بعد از ابتدای متن ^:pattern
شروع شود و انتهای $:pattern
باید بلافاصله به دنبال آن بیاید.
کل رشته باید دقیقاً در این قالب باشد. اگر انحراف یا یک کاراکتر اضافی وجود داشته باشد، نتیجه false
است.
اگر پرچم m
وجود داشته باشد، anchorها رفتار متفاوتی دارند. آن را در مقاله بعدی خواهیم دید.
anchorهای ^:pattern
و $:pattern
تست هستند. عرض آنها صفر است.
به عبارت دیگر، آنها با یک کاراکتر مطابقت ندارند، بلکه موتور regexp را مجبور میکنند تا شرایط را بررسی کند (شروع/پایان متن).