حالت چند خطی با flag m
فعال می شود.
فقط بر رفتار ^:pattern
و $:pattern
تأثیر می گذارد.
در حالت چند خطی، نه تنها در ابتدا و انتهای رشته، بلکه در شروع/پایان خط نیز مطابقت دارند.
جستجو در شروع خط ^
در مثال زیر متن دارای چندین خط است. الگوی /^\d/gm
از ابتدای هر خط یک رقم می گیرد:
let str = `1st place: Winnie
2nd place: Piglet
3rd place: Eeyore`;
console.log( str.match(/^\d/gm) ); // 1, 2, 3
بدون flag m
تنها رقم اول مطابقت دارد:
let str = `1st place: Winnie
2nd place: Piglet
3rd place: Eeyore`;
console.log( str.match(/^\d/g) ); // 1
دلیلش این است که به طور پیش فرض یک ^:pattern
فقط در ابتدای متن و در حالت چند خطی – در ابتدای هر خط مطابقت دارد.
“شروع یک خط” به طور رسمی به معنای “بلافاصله پس از شکست خط” است: آزمایش “^:pattern” در حالت چند خطی با همه موقعیت هایی که بعد از یک کاراکترِ خط جدید n\
قرار دارند مطابقت دارد.
و در شروع متن.
جستجو در انتهای خط $
علامت دلار $:pattern
رفتار مشابهی دارد.
عبارت منظم $pattern:\d
آخرین رقم را در هر خط پیدا می کند
let str = `Winnie: 1
Piglet: 2
Eeyore: 3`;
console.log( str.match(/\d$/gm) ); // 1,2,3
بدون flag m
و $:pattern
علامت دلار فقط با انتهای کل متن مطابقت دارد، بنابراین فقط آخرین رقم پیدا می شود.
“پایان یک خط” به طور رسمی به معنای “بلافاصله قبل از شکست خط” است: تست “$:pattern” در حالت چند خطی با همه موقعیتهایی که قبل از یک کاراکتر خط جدید "n" قرار دارند، مطابقت دارد.
و در انتهای متن.
جستجو برای \n به جای ^ $
برای یافتن یک خط جدید، می توانیم نه تنها از anchorهای ^:pattern
و $:pattern
، بلکه از کاراکتر خط جدید n\
استفاده کنیم.
تفاوت در چیست؟ بیایید یک مثال را ببینیم.
در اینجا ما \d\n
را به جای $pattern:\d
جستجو می کنیم:
let str = `Winnie: 1
Piglet: 2
Eeyore: 3`;
console.log( str.match(/\d\n/g) ); // 1\n,2\n
همانطور که می بینیم به جای 3 شباهت 2 شباهت وجود دارد.
دلیلش این است که بعد از 3:subject
خط جدیدی وجود ندارد (البته پایان متن وجود دارد، بنابراین با $:pattern
مطابقت دارد.
تفاوت دیگر: اکنون هر تطابق شامل یک کاراکتر خط جدید \n
است. برخلاف $:pattern
و ^:pattern
که فقط شرط (شروع/پایان یک خط) را آزمایش می کنند، n\
یک کاراکتر است، بنابراین بخشی از نتیجه می شود.
بنابراین، زمانی که به کاراکترهای خط جدید در نتیجه نیاز داشته باشیم، از n\
در الگو استفاده می شود، در حالی که از anchorها برای یافتن چیزی در ابتدا/پایان یک خط استفاده می شود.