۱۵ مارس ۲۰۲۳

حالت چند خطی anchors ^ $، flag "m"

حالت چند خطی با 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ها برای یافتن چیزی در ابتدا/پایان یک خط استفاده می‌ شود.

نقشه آموزش

نظرات

قبل از نظر دادن این را بخوانید…
  • اگر پیشنهادی برای بهبود ترجمه دارید - لطفا یک ایشوی گیت‌هاب یا یک پول‌ریکوئست به جای کامنت‌گذاشتن باز کنید.
  • اگر چیزی را در مقاله متوجه نمی‌شوید – به دقت توضیح دهید.
  • برای قراردادن یک خط از کد، از تگ <code> استفاده کنید، برای چندین خط – کد را درون تگ <pre> قرار دهید، برای بیش از ده خط کد – از یک جعبهٔ شنی استفاده کنید. (plnkr، jsbin، codepen…)