از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
جاوا اسکریپت: بررسی کنید که آیا رشته حاوی یک رشته فرعی است یا خیر.عملیات رایج در بسیاری از زبان های برنامه نویسی این است که بررسی کنید آیا یک رشته دارای رشته دیگری است یا خیر. در حالی که این یک کار ساده و رایج است، نام روش ها اغلب بین زبان های برنامه نویسی متفاوت است. به عنوان مثال، در اینجا یک نمونه کوچک از روش های مورد استفاده برای دستیابی به این امر در زبان های مختلف آورده شده است: جاوا: رشته ….
سرفصلهای مطلب
یک عملیات متداول در بسیاری از زبان های برنامه نویسی بررسی اینکه آیا یک رشته دارای رشته دیگری است یا خیر. در حالی که این یک کار ساده و رایج است، نام روش ها اغلب بین زبان های برنامه نویسی متفاوت است. به عنوان مثال، در اینجا یک نمونه کوچک از روش های مورد استفاده برای دستیابی به این امر در زبان های مختلف آورده شده است:
- جاوا:
String.contains()
،String.indexOf()
، و غیره. - پایتون:
in
اپراتور،String.index()
،String.find()
- برو:
strings.Contains()
- Ruby:
string.include?
نکته را متوجه شدید. میلیون ها راه برای انجام این کار وجود دارد و به نظر می رسد هر زبانی آن را به گونه ای متفاوت پیاده سازی می کند.
به هر حال، بیایید چند روش را ببینیم که از طریق آنها می توانید بررسی کنید که آیا یک رشته دارای یک رشته فرعی در جاوا اسکریپت است یا خیر.
توجه داشته باشید: دو روش اول نشان داده شده در زیر نیز کار می کنند روی آرایهها، که به شما میگوید آیا یک آرایه حاوی مقدار معینی است (یا شاخص آن indexOf()
). هنگام خواندن مقاله این را در نظر داشته باشید زیرا احتمالاً در موارد استفاده مشابه به شما کمک می کند.
را String.includes()
روش
این روش در ES6 معرفی شد و معمولاً روش ارجح برای موارد استفاده ساده است. اگر تنها کاری که باید انجام دهید این است که یک مقدار بولی دریافت کنید که نشان می دهد رشته فرعی در رشته دیگری است یا خیر، این همان چیزی است که می خواهید استفاده کنید.
اینطوری کار میکنه:
> let str = 'rasanegar';
> let substr = 'stack';
> str.includes(substr);
true
همانطور که می بینید، یک مقدار بولی برگردانده می شود زیرا رشته “stack” زیر رشته ای از است rasanegar
.
این یک جستجوی حساس به حروف بزرگ و کوچک است، بنابراین موارد زیر با رشته فرعی مطابقت ندارند:
> let str = 'rasanegar';
> let substr = 'stack';
> str.includes(substr);
false
در حالی که این برای اکثر موارد استفاده کافی است، includes()
روش همچنین گزینه دیگری را ارائه می دهد که ممکن است برای شما مفید باشد. آرگومان دومی را می توان ارائه کرد که به روشی می گوید که جستجو را از کدام شاخص شروع کند. بنابراین اگر میدانید که رشته فرعی در 50 کاراکتر اول وجود ندارد (یا نمیخواهید با آن کاراکترها مطابقت داشته باشد)، میتوانید از روش زیر استفاده کنید:
str.includes(substr, 50);
جبرانی از زیر 0 فقط جستجو را از نمایه 0 شروع می کند و یک افست بیشتر از string.length
برمی گرداند false
از آنجایی که جستجو از شروع می شود string.length
.
را String.indexOf()
روش
را String.indexOf()
روش بسیار شبیه روش قبلی است includes()
روش (و برای استفاده در پلی پر مناسب است includes()
همچنین)، اما تنها تفاوت در مقدار بازگشتی است. به جای برگرداندن یک مقدار بولی که حضور زیررشته را نشان می دهد، در واقع محل فهرست زیررشته یا -1 را در صورت عدم وجود آن برمی گرداند.
در اینجا یک مثال است:
> let str = 'rasanegar';
> let substr = 'abuse';
> str.indexOf(substr);
5
> str.indexOf('apple');
-1
همانطور که می بینید، این روش موقعیت شاخص مبتنی بر 0 رشته فرعی و یک -1 را هنگامی که رشته فرعی پیدا نشد، برمی گرداند.
درست مثل includes()
روش، indexOf()
روش به حروف بزرگ و کوچک حساس است و همچنین از پارامتر offset پشتیبانی می کند:
> let str = 'rasanegar';
> let substr = 'abuse';
> str.indexOf(substr);
-1
> str.indexOf('Abu', 3);
5
> str.indexOf('Abu', 6);
-1
این روش برای زمانی مفید است که باید مکان دقیق زیررشته را بدانید، با این حال، هنگامی که به سادگی از آن به عنوان یک بولی استفاده می کنید، تمیز نیست:
let str = 'rasanegar';
let substr = 'stack';
if (str.indexOf(substr) > -1) {
console.log('Found the substring!');
}
در چنین مواردی باید از includes()
روش به جای آن که بیشتر مستعد خطا است.
Regex
یکی از راههای مفید و قدرتمند برای بررسی زیررشته استفاده از عبارات منظم یا regex است. استفاده از regex برای کارهایی مانند این به شما انعطاف بسیار بیشتری نسبت به روش های قبلی می دهد که در آن فقط می توانید یک رشته ثابت را بررسی کنید. در حالی که regex موضوعی بسیار بزرگ است که نمیتوان در اینجا به طور کامل آن را پوشش داد، حداقل میتوانیم نگاهی به برخی از ویژگیهای مفید مورد استفاده خود بیندازیم.
بررسی رشته های فرعی در یک رشته با regex می تواند با استفاده از RegExp.test()
روش:
> let str = 'rasanegar';
> /stack/.test(str);
true
برخلاف دو روش قبلی، اکنون میتوانیم جستجوهای غیرحساس به حروف بزرگ و کوچک را با استفاده از آن انجام دهیم i
پرچم:
> let str = 'rasanegar';
> /stack/i.test(str);
true
به عنوان یک مثال پیچیدهتر، فرض کنید میخواهید ببینید که آیا یک رشته دارای کد پستی (کدهای پستی 5 رقمی) است یا خیر، اما واقعاً برایتان مهم نیست که چه کد پستی در رشته وجود دارد. این نوع مشکل را نمی توان با استفاده از آن حل کرد includes()
یا indexOf()
. اما با regex، ما به راحتی می توانیم این را آزمایش کنیم:
> let str = 'My zip code is 90210';
> /\d{5}/.test(str);
true
> str = 'My address is 123 Fake St.';
> /\d{5}/.test(str);
false
در حالی که جاوا اسکریپت لزوماً به دلیل سرعتش شناخته شده نیست، به خاطر داشته باشید که این سرعت کندتر از روش سادهتری مانند includes()
، بنابراین باید فقط برای موارد پیچیده تری استفاده کنید که با راه حل ساده تر قابل حل نیستند.
نتیجه
دستکاری و بازرسی رشته ها یکی از رایج ترین کارهایی است که در بسیاری از زبان های برنامه نویسی، به ویژه با کدهای رو به رو کاربر، انجام می شود. به دلایل مختلف، مانند اعتبارسنجی رشته ها، باید بررسی کنید که آیا یک رشته دارای یک رشته فرعی است یا خیر. در این مقاله چند روش مختلف ارائه شده توسط جاوا اسکریپت را دیدیم که به شما امکان می دهد دقیقاً این کار را انجام دهید.
(برچسبها برای ترجمه)# جاوا اسکریپت
منتشر شده در 1403-01-22 16:28:10