2 ماه قبل

4 دیدگاه

regex in javascript

قفل‌هایی که با regex باز می‌شوند: در javascript

regex یه ابزار قدرتمند برای پیدا کردن و تغییر دادن متن با استفاده از الگو(pattern)ها است. در این مقاله یه معرفی خلاصه از regex و استفاده از اون در javascript رو میگیم.

می‌خوایم درمورد ابزاری به اسم regex صحبت کنیم. این ابزار که برای همه زبان‌های برنامه نویسی می‌تونه استفاده بشه، برای پیدا کردن، جاگذاری، استخراج منابع خاص مثل ایمیل‌ها یا اعتبارسنجی(validation) ورودی و … استفاده میشه. در اول بیاید ببینیم چطوری؟

regex چطوری کار می‌کنه؟

فرض کنید ما در ورودی یه ایمیل از کاربر میگیریم و می‌خوایم ببینیم آیا این ورودی ساختار ایمیل درستی داره؟ واقعا ایمیل هست یا نه؟ می‌تونیم یه الگو یا pattern بسازیم و همه ورودی‌ها رو با اون چک کنیم. یه مثال ببینیم:

const pattern = /\w+@\w*.\w*/;
console.log(pattern.test("codeexplore@gmail.com")); // true

در اینجا الگوی ما *w+@\w*.\w\ هست. که بین دوتا اسلش گذاشتیم.
ولی چندتا نکته که الان باید بگیم:

  • ما برای درک راحت این قضیه یه الگوی خیلی ساده نوشتیم که ممکنه خیلی مشکل داشته باشه. برای نوشتن الگو‌های مختلف باید اونا رو یاد بگیرم که زیاد هم نیستن.
  • الگو‌های مختلف در هر زبان برنامه نویسی هست که ممکنه اختلافات جزئی داشته باشن. پس برای هر زبان باید با الگوی همون زبان نوشت که البته تفاوت زیادی در اصل قضیه نیست.
  • یادگیری این الگوها کاری ساده‌ایه فقط کافیه یکم وقت بزارید و تمرین کنید. می‌تونید از regex 101 برای تمرین کردن یا تست کردن الگو‌هاتون با متنی که می‌خواید و حتی اگه کمی با regex آشنایی دارید برای یادگیری و یادآوری استفاده کنید.

regex در javascript:

اینجا می‌خوایم regex رو در جاوااسکریپت استفاده کنیم. در اول متد‌های استرینگ رو با استفاده ازش ببینیم:

متد ()test

این متد برای تایپ RegExp هست و بررسی می‌کنه ببینه الگویی که دادین توی متن هست یا نه. اگر بود true و اگر نیس false رو برمی‌گردونه:

const regex = /hello/;
console.log(regex.test("hello world")); // true

متد ()match

این متد با الگویی که بهش دادیم دنبال جواب‌هایی توی متن می‌گرده و آرایه‌ای از جواب‌ها رو میده. درصورتی که هیچ جوابی پیدا نکنه null رو برمی‌گردونه. توی مثال پایین فرض کنید ما یه لیست از اسامی رو داریم و می‌خوایم فقط اونهایی که توی اسمشون حرف i دارن رو پیدا کنیم:

const text = "iman ali mohammad amir mehdi javad"
const pattern = /\w*i\w*/gm;
const resultIterator = text.match(pattern);
for (const match of resultIterator) {
  console.log(match);
}
// iman
// ali
// amir
// mehdi

متد ()replace

این متد جواب هایی که توی متن پیدا می‌کنه رو با چیزی که می‌خوایم جاگذاری می‌کنه.

const text = "I love JavaScript";
console.log(text.replace(/JavaScript/, "Node.js")); // I love Node.js

متد ()search و ()split

این دوتا متد هم مثل متد‌های 2 و 3 متد‌های string هستن. search توی متن می‌گرده و index اولین جوابی که پیدا کرد رو بهمون میده. اگه جوابی پیدا نکنه -1 برمی‌گردونه.
و split با توجه به چیزی که بهش دادیم تقسیم بندی می‌کنه.

console.log("hello world".search(/world/)); // 6

const text = "apple,banana,grape";
console.log(text.split(/,/)); // ["apple", "banana", "grape"]

حالا ما یه مبحثی داریم توی regex که میایم یه قسمتی رو توی متن انتخاب می کنیم(همینطور که تا الان این‌ کار رو انجام دادیم) واز اون بخش انتخاب شده هم یه قسمتی رو گروه بندی می‌کنیم. که بعدا از اون گروه استفاده کنیم.

مثلا فرض کنید ما اومدیم همه ایمیل‌ها رو پیدا کردیم. و می‌خوایم قسمت اول رو جدا کنیم. مثلا از codeexplore@gmail.com فقط codeexplore رو می‌خوایم. اگه همچین الگویی نوشتیم و خواستیم گروه‌ها رو پیدا کینم از این دو متد پایین استفاده می‌کنیم:

متد ()exec

این متد هم برای تایپ RegExp هست و اولین match(جواب) رو طبق الگو توی متن پیدا می‌کنه و به همراه گروه‌هایی که توی اون حواب وجود داره بصورت یه آرایه ارائه میده.

const text = `my name is 'Ali', my team is 'codeexplore', and my friend name is 'mohammad'`;
const pattern = /my\s(\w*)\s+[\w| ]*'(\w+)'/gm;
const resultIterator = pattern.exec(text);
console.log(resultIterator);
// [
//   "my name is 'Ali'",
//   'name',
//   'Ali',
//   index: 0,
//   input: "my name is 'Ali', my team is 'codeexplore', and my friend name is 'mohammad'",
//   groups: undefined
// ]

متد ()matchAll

این متد برای string هاست. توی متن طبق الگویی که دادیم جستجو می‌کنه و همه جواب‌ها رو با گروه‌بندی‌هاشون در قالب آرایه‌های جدا برمی‌گردونه. جواب مثال قبل رو این بار با matchAll ببینیم:

const text = `my name is 'Ali', my team is 'codeexplore', and my friend name is 'mohammad'`;
const pattern = /my\s(\w*)\s+[\w| ]*'(\w+)'/gm;
const resultIterator = text.matchAll(pattern);
for (const match of resultIterator) {
  console.log(match);
}
// [
//   "my name is 'Ali'",
//   'name',
//   'Ali',
//   index: 0,
//   input: "my name is 'Ali', my team is 'codeexplore', and my friend name is 'mohammad'",
//   groups: undefined
// ]
// [
//   "my team is 'codeexplore'",
//   'team',
//   'codeexplore',
//   index: 18,
//   input: "my name is 'Ali', my team is 'codeexplore', and my friend name is 'mohammad'",
//   groups: undefined
// ]
// ... (; یه جواب دیگه هم داره که بدلیل اینکه طولانی میشه نیاوردیم

همینطور پیشنهاد می‌کنم بخونید: kde connect چیست؟(انتقال فایل به راحتی آب خوردن)

حرف آخر:

Regex یه ابزار قدرتمند برای دستکاری string ها در جاوا اسکریپت هست. با یادگیری و تسلط به مفاهیم اصلی و syntax، می تونید به طور موثر داده های متنی رو جستجو، استخراج و اعتبار سنجی(validate) کنید.
این فقط یه معرفی و دستور استفاده از Regex توی جاوااسکریپت بود. برای کار کردن بیشتر و تست الگو‌هایی که ساختید می‌تونید از regex 101 استفاده کنید. از طرفی با اینکه جاوااسکریپت بصورت built-in از Regex پشتیبانی می‌کنه، درصورت نیاز می‌تونید از کتابخونه +Regex استفاده کنید.

4 پاسخ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

پیشنهاد های کد اکسپلور