کداکسپلور | CodeExplore
7.91K subscribers
1.96K photos
314 videos
103 files
1.74K links
با کد اکسپلور یاد بگیر، لذت ببر و بروز باش ⚡️😉

سایت کد‌اکسپلور:
CodeExplore.ir
👨🏻‍💻 ارتباط با ما :
@CodeExploreSup
گروه :
@CodeExplore_Gap
تبلیغات در کد اکسپلور :
@CodeExploreAds
Download Telegram
7️⃣ آموزش ریجکس (regex) (عبارت های با قاعده) ☺️ - قسمت هفتم

⬅️ با سلامی دوباره به رو ماهتون، قراره امروز یه مبحث خیلی مهم رو توی ریجکس یاد بگیریم ، و اونم چیزی نیست جز گروه بندی و capture

قبلا در مورد براکت صحبت کردیم و گفتیم که پرانتز رو فعلا مشابه بدونید؛ اما امروز قراره این مبحث رو باز ترش کنیم.


⚫️ اول مثل همیشه من یه متن ساده مینویسم :
amir 2002
ali 2000
daniyal 2002
hamid 2012
sobhan 1980


قبل از اینکه بخوام توضیح گروه بندی رو بدم ، بزارید یه ریجکس بنویسم:

/[a-zA-Z]* \d{4}/gm

amir 2002, ali 2000, daniyal 2002, hamid 2012, sobhan 1980


اگه تا حالا با آموزش پیش رفته باشید ، ریجکس بالا رو ساده میتونید بفهمید ؛ کل ریجکس بالا میگه عباراتی رو پیدا کن که ، اولشون کارکتر a تا z (هم بزرگ و هم کوچیک) و در ادامه یک فاصله و یک عدد 4 رقمی وجود داشته باشه.

❗️ این نکته رو هم بگم که ممکنه [a-zA-Z] یکم براتون عجیب به نظر بیاد. ولی خیلی ساده است؛ قبلا با [a-z] آشنا شده بودید ، که یعنی هر کارکتری بین a تا z کوچیک. حالا ما بعدش یه رنج دیگه هم میتونیم مشخص کنیم (حتی میتونیم اعداد مشخص کنیم!)
❗️ با نماد w\ آشنا هستید ، این نماد دقیقا برابر میشه با :
[a-zA-Z0-9_]
یعنی شما با براکت خیلی راحت میتونید ، رنج های محتلفی ایجاد کنید :)


⛔️ حالا از بحث اصلی خارج نشیم! با ریجکس بالا ما تونستیم اسم به همراه عدد رو دریافت کنیم. اما یه زمانی ما دقیقا همچین حالتی داریم ولی با داده های خیلی زیاد، و میخوایم اسم و اعداد رو از هم جدا کنیم! (روش برای این کار زیاده، روش اول میتونه هندل کردن با زبان برنامه نویسی باشه، روش دوم میتونه نوشتن دوتا ریجکس باشه و روش سوم استفاده از گروه بندیه)

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

🚫 بیاید ریجکس بالا رو به صورت گروه بندی شده بنویسیم:

([a-zA-Z]*) (\d{4})

amir 2002, ali 2000, daniyal 2002, hamid 2012, sobhan 1980


⚫️ الان من فقط 4 تا پرانتز اضافه کردم، ولی با همین تغییر به ریجکس فهموندم، قسمت اول ، گروه اولمه، و قسمت دوم گروه دومه.
برای اینکه بفهمیم این اصلا کجا کاربرد داره ، من توی جاوا اسکریپت یه اسکریپت ساده مینویسم.

let text = '.....' // همون متن بالا
let regex = /([a-zA-Z]*) (\d{4})/gmi;
let matchAll = text.match(regex)

let names = [];
let born = [];
matchAll.forEach(() => {
let match = regex.exec(matchAll);
names.push(match[1]);
born.push(match[2])
})

console.log(names, born)


⬆️ به شکل بالا ، میتونیم اسم ها و اعداد رو جدا کنیم (این یه مثال ساده است که با روش های زیادی هندل میشه، اما در متن های پیشرفته تر این روش خیلی کاربردی تره)

😔 حالا بزارید من متن رو یه تغییری بدم ، و یکی دیگه از کاربرد های گروه بندی رو هم یاد بگیریم:

ha-ha
man-man
check-chick
no-yes
one-two
beb-beb


فرض کنید ، ما میخوایم از متن بالا ، عباراتی رو انتخاب کنیم که بینشون دَش (-) باشه و دو طرف دَش شبیه به هم باشن. 🫠

اینجا از گروه بندی و ارجاع به گروه استفاده میکنیم (ارجاع ، یعنی اشاره کردن) 😔

ریجکس زیر رو ببنید:
/(\w+)-\1/img

ha-ha, man-man, beb-beb


🥸 شاید الان بگید ، 1\ یعنی چی ؟ هر عددی بعد از بک اسلش قرار بگیره ، اشاره به گروه میکنه! الان توی ریجکس بالا ، فقط یدونه گروه داریم، پس 1\ یعنی اشاره کردن به گروه اول.
خیلی بخوام واضح ریجکس بالا رو توضیح بدم میشه این : عباراتی را پیدا کن که ، اولشون به تعداد 1 الی اِن تا حروف داشته باشه و در ادامه یک دَش قرار بگیره و در آخر همان گروهی که پیدا شده در ادامه دَش وجود داشته باشه.

😔 توجه کنید که وقتی از 1\ استفاده میکنیم ، دقیقا همون الگو داخل گروه رو جایگزاری کردیم و فقط ریجکسمونو کوتاه ترش کردیم 😬
برای مثال ، ریجکس بالا بدون گروه بندی و ارجاع میشه این :

/\w+-\w+/img


❤️ حالا مثال ما خودش کوچولوعه و به چشم نمیاد :(
ولی توی ریجکس های پیشرفته تر مارو از بازنویسی رها میکنه 😬

👋 آموزش رو همینجا به پایان میرسونم و بهتون یه سایت معرفی میکنم که زبان فارسی رو هم پشتیبانی میکنه (خودم اضافه کردم☝️) و میتونید همین موارد رو اونجا هم یاد بگیرید (از حالت فقط متنی خارجه و روش خوبیه)

Site : Regex 🐱


#regex #regular_expression
#regex_7
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
14❤‍🔥3🔥3