کروم 73 متد String.prototype.matchAll()
را معرفی می کند. رفتاری مشابه با match()
دارد، اما یک تکرار کننده را با تمام تطابقات عبارات منظم در یک عبارت منظم جهانی یا چسبنده برمی گرداند. این یک راه ساده برای تکرار بیش از مسابقات، به خصوص زمانی که نیاز به دسترسی به گروههای عکسبرداری دارید، ارائه میکند.
مشکل () match چیست؟
پاسخ کوتاه هیچ است، مگر اینکه بخواهید مسابقات جهانی را با گروه های تسخیر کننده بازگردانید. در اینجا یک پازل برنامه نویسی برای شما وجود دارد. کد زیر را در نظر بگیرید:
const regex = /t(e)(st(\d?))/g;
const string = 'test1test2';
const results = string.match(regex);
console.log(results);
// → ['test1', 'test2']
این را در یک کنسول اجرا کنید و متوجه شوید که آرایه ای حاوی رشته های 'test1'
و 'test2'
را برمی گرداند. اگر پرچم g را از عبارت معمولی حذف کنم، همه گروههای ضبط کننده من را دریافت میکنم، اما فقط اولین مسابقه را دریافت میکنم. به نظر می رسد این است:
['test1', 'e', 'st1', '2', index: 0, input: 'test1test2', groups: undefined]
این رشته حاوی یک تطابق احتمالی دوم است که با 'test2'
شروع می شود، اما من آن را ندارم. اکنون این معما است: چگونه می توانم همه گروه های گرفتن را برای هر مسابقه بدست بیاورم؟ توضیح دهنده پیشنهاد String.prototype.matchAll() دو رویکرد ممکن را نشان می دهد. من آنها را توصیف نمی کنم زیرا امیدوارم مدت زیادی به آنها نیاز نداشته باشید.
String.prototype.matchAll()
مثالهای توضیحدهنده با matchAll()
چگونه خواهند بود؟ نگاهی بینداز
const regex = /t(e)(st(\d?))/g;
const string = 'test1test2';
const matches = string.matchAll(regex);
for (const match of matches) {
console.log(match);
}
در این مورد چند نکته قابل ذکر است. برخلاف match()
که یک آرایه را در یک جستجوی سراسری برمی گرداند، matchAll()
یک تکرار کننده را برمی گرداند که به زیبایی با حلقه های for...of
کار می کند. تکرار کننده یک آرایه برای هر مسابقه تولید می کند، از جمله گروه های ضبط کننده با چند مورد اضافی. اگر اینها را روی کنسول چاپ کنید به این شکل می شوند:
['test1', 'e', 'st1', '1', index: 0, input: 'test1test2', groups: undefined]
['test2', 'e', 'st2', '2', index: 5, input: 'test1test2', groups: undefined]
ممکن است متوجه شوید که مقدار هر تطابق آرایهای با همان قالبی است که توسط match()
برای عبارات منظم غیرکلی برگردانده شده است.
مواد جایزه
این عمدتاً برای افرادی است که تازه وارد عبارات منظم هستند یا در آن متخصص نیستند. ممکن است متوجه شده باشید که نتایج هر دو match() و matchAll() (برای هر تکرار) آرایه هایی با برخی ویژگی های نامگذاری شده اضافی هستند. در حین تهیه این مقاله، متوجه شدم که این ویژگیها دارای نقصهایی در اسناد MDN هستند (که من آن را برطرف کردم ). در اینجا یک توضیح سریع است.
-
index
- شاخص اولین نتیجه در رشته اصلی. در مثال بالا
test2
از موقعیت 5 شروع می شود، بنابراینindex
دارای مقدار 5 است. -
input
- رشته کاملی که
matchAll()
با آن اجرا شد. در مثال من،'test1test2'
بود. -
groups
- حاوی نتایج هر گروه ثبت نامی است که در عبارت منظم شما مشخص شده است.
نتیجه گیری
اگر چیزی را از دست دادم لطفاً در نظرات زیر به من اطلاع دهید. میتوانید درباره تغییرات اخیر جاوا اسکریپت در بهروزرسانیهای قبلی یا در وبسایت V8 اطلاعات بیشتری کسب کنید.