از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
جایگزینی وقوع یک زیر رشته در رشته با جاوا اسکریپت جایگزینی همه یا n مورد از یک زیر رشته در یک رشته معین یک مشکل نسبتاً رایج دستکاری رشته و پردازش متن به طور کلی است. جاوا اسکریپت چند راه برای انجام این کار نسبتاً آسان ارائه می دهد. در این آموزش، چند نمونه از روش جایگزینی وقوع یک …
سرفصلهای مطلب
معرفی
جایگزینی همه یا n وقوع یک رشته فرعی در یک رشته معین یک مشکل نسبتاً رایج دستکاری رشته و پردازش متن به طور کلی است. جاوا اسکریپت چند راه برای انجام این کار نسبتاً آسان ارائه می دهد.
در این آموزش، چند نمونه از روش جایگزینی وقوع یک زیر رشته در یک رشته با استفاده از جاوا اسکریپت را پوشش خواهیم داد.
ما با این جمله کار خواهیم کرد:
The grey-haired husky has one blue and one brown eye.
ما می خواهیم کلمه را جایگزین کنیم "blue"
با "hazel"
.
جایگزین کردن()
ساده ترین راه برای انجام این کار استفاده از داخلی است replace()
تابع. این یک عبارت منظم را به عنوان آرگومان اول می پذیرد، و کلمه(هایی) را که به عنوان آرگومان دوم با کلمات قدیمی جایگزین می کنیم. از طرف دیگر، یک رشته را به عنوان اولین آرگومان نیز می پذیرد.
از آنجایی که رشته ها در جاوا اسکریپت تغییر ناپذیر هستند، این عملیات یک رشته جدید را برمی گرداند. بنابراین اگر بخواهیم تغییرات را دائمی کنیم، باید نتیجه را به یک رشته جدید اختصاص دهیم روی برگشت.
بیایید ببینیم چگونه می توانیم از تابع استفاده کنیم:
const regex = /blue/;
let originalStr = 'The grey-haired husky has one blue and one brown eye.';
let newStr = originalStr.replace(regex, 'hazel');
console.log(originalStr);
console.log(newStr);
در اینجا، ما از یک عبارت منظم به جای مثال a استفاده کرده ایم RegExp
نمونه، مثال. این نتیجه در:
The grey-haired husky has one blue and one brown eye.
The grey-haired husky has one hazel and one brown eye.
از طرف دیگر، میتوانیم عبارت منظم را به صورت زیر تعریف کنیم:
let regex = new RegExp('blue');
نتیجه همان می شد تفاوت بین regex literal و a RegExp
هدف این است که literals قبل از اجرا کامپایل می شوند، در حالی که شی در زمان اجرا کامپایل می شود.
اولی اگر عبارت منظم ثابت بماند کارآمدتر است، در حالی که دومی معمولاً اگر regex بتواند پویا باشد، مانند عبارت تعریف شده توسط کاربر، استفاده می شود.
برای انجام جایگزینی غیر حساس به حروف، میتوانید آن را پاس کنید i
پرچم به عبارت منظم:
const regex = /blue/i;
let originalStr = 'The grey-haired husky has one Blue and one brown eye.';
let newStr = originalStr.replace(regex, 'hazel');
console.log(originalStr);
console.log(newStr);
حال، این نتیجه می شود:
The grey-haired husky has one Blue and one brown eye.
The grey-haired husky has one hazel and one brown eye.
بدون i
پرچم، Blue
با /blue/
regex
در نهایت، می توانید به جای یک عبارت معمولی از یک رشته استفاده کنید:
let originalStr = 'The grey-haired husky has one blue and one brown eye.';
let newStr = originalStr.replace('blue', 'hazel');
console.log(originalStr);
console.log(newStr);
این نیز منجر به:
The grey-haired husky has one blue and one brown eye.
The grey-haired husky has one hazel and one brown eye.
توجه داشته باشید: این رویکرد کار می کند فقط برای اولین اتفاق از رشته جستجو برای تعویض همه بروز، شما می توانید استفاده کنید replaceAll()
تابع.
اگر رشته را به روز کنیم:
let originalStr = 'The grey-haired husky a blue left eye and a blue right eye.';
let newStr = originalStr.replace('blue', 'hazel');
نتیجه این خواهد بود:
The grey-haired husky has a blue left eye and a blue right eye.
The grey-haired husky has a hazel left eye and a blue right eye.
توجه کنید که چگونه فقط اولین رخداد “آبی” جایگزین می شود، اما نه دوم.
توجه داشته باشید که ما در واقع می توان جایگزینی تمام نمونه های یک رشته در هنگام استفاده از رویکرد regex و .replace()
. برای تحقق این امر، ما می خواهیم از آن استفاده کنیم g
پرچم regex که مخفف کلمه “جهانی” است. این با تمام نمونه های یک رشته مطابقت دارد. مثلا:
const regex = /blue/g;
let originalStr = 'The grey-haired husky a blue left eye and a blue right eye.';
let newStr = originalStr.replace(regex, 'hazel');
console.log(originalStr);
console.log(newStr);
The grey-haired husky has a blue left eye and a blue right eye.
The grey-haired husky has a hazel left eye and a hazel right eye.
()placeAll
از آگوست 2020، همانطور که توسط مشخصات ECMAScript 2021 تعریف شده است، می توانیم از replaceAll()
تابعی برای جایگزینی تمام نمونه های یک رشته.
رشتهای را میپذیرد که ما به دنبال آن هستیم و رشتهای را که میخواهیم آن را جایگزین کنیم:
let originalStr = 'The grey-haired husky has a blue left eye and a blue right eye.';
let newStr = originalStr.replaceAll('blue', 'hazel');
console.log(originalStr);
console.log(newStr);
این نتیجه در:
The grey-haired husky has a blue left eye and a blue right eye.
The grey-haired husky has a hazel left eye and a hazel right eye.
اکنون همه نمونه هایی از کلمه جستجو جایگزین شده است.
شکاف() و پیوستن()
اگر replaceAll()
در زمان اجرا جاوا اسکریپت شما پشتیبانی نمی شود، می توانید از قدیمی قابل اعتماد استفاده کنید split()
و join()
رویکرد:
let originalStr = 'The grey-haired husky has a blue left eye and a blue right eye.';
let newStr = originalStr.split('blue').join('hazel');
console.log(originalStr);
console.log(newStr);
این split()
تابع رشته را به آرایه ای از رشته های فرعی تقسیم می کند روی رشته داده شده – 'blue'
. پس از تقسیم، آرایه ای از موارد زیر را داریم:
("The grey-haired husky has a ", " left eye and a ", " right eye.")
سپس، هنگامی که استفاده کنید join()
با یک رشته، آن را به جمله اصلی وصل می کنیم، با رشته ای که به تابع درج شده در breaks منتقل می شود.
حالا، ما مانده ایم همه اتفاقات رشته اصلی با رشته جدید جایگزین شده است:
The grey-haired husky has a blue left eye and a blue right eye.
The grey-haired husky has a hazel left eye and a hazel right eye.
توجه داشته باشید: در حالی که این روش کار می کند، اگر یکی از روش های توضیح داده شده قبلی برای استفاده در دسترس باشد، استفاده از آن توصیه نمی شود. دلیل این امر این است که هدف پشت این رویکرد در نگاه اول چندان واضح نیست و بنابراین کد را کمتر قابل خواندن می کند.
نتیجه
در این مقاله، چند نمونه از روش جایگزینی وقوع یک رشته فرعی در یک رشته را با استفاده از جاوا اسکریپت مرور کردیم.
منتشر شده در 1403-01-19 13:39:03