در پست قبلی باهم در مورد تاریخچه و کاربرد ریجکس صحبت کردیم ، امروز قراره به طور رسمی وارد آموزش ریجکس بشیم و یخورده عمیق تر بررسی کنیم
قبل از شروع آموزش اصلی باید بهتون بگم تو این آموزش اول ریجکس رو مینویسم و زیرش خروجی که به ما میده. همچنین میخوام بهتون دوتا سایت معرفی کنم که برای تمرین در مورد ریجکس خیلی عالیه
و بهتره بعد از آموزش هر روز خودتونم برید و تست کنید :
فرض کنید متنی مثل زیر داریم :
You can see the names of all my friends here: Amin, AmirMassoud, AmirAli, Amir, Saeed, Korosh, Agha Reza, amiran
یعنی من توی جمله بالا میخوام فقط کلمه Amir رو استخراج کنم ، برای این کار سینتکس ریجکس میشه این :
/Amir/
Amir
توجه کنید که / اول و آخر خونده نمیشن و سینتکس اصلی خود ریجکسه (PCRE) و هرچیزی بین دوتا / باشه الگو شماست و هرچیزی بعد از / آخر باشه flag شماست که الان توضیح میدم چیه
با توجه به ریجکسی که الان نوشتیم ، انتظار داریم که از متن بالا تمامی Amir هارو استخراج کنه، اما به دوتا مشکل میخوریم !
اول اینکه اگه بدون flag از این ریجکس استفاده کنیم فقط اولین الگو رو برای ما برمگیردونه ! پس اول بیاید کاری کنیم که همه رو پیدا کنه :
/Amir/g
Amir, Amir, Amir
حالا اگر دقت کنید یدونه g به آخر ریجکسمون اضافه کردیم ، g مخفف کلمه global و یعنی تمامی موارد پیدا شده رو برای من برگردونه
ولی بازم یه مشکلی داریم! ریجکس به حروف بزرگ و کوچیک حساسه پس کلمه amir داخل amiran رو برای ما پیدا نمیکنه
برای حل این مشکلم باید یه flag دیگه اضافه کنیم به اسم i که مخفف insensitive که یعنی روی حروف بزرگ و کوچیک حساس نباش
پس ریجکس اصلی ما برای پیدا کردن تمامی amir ها میشه این :
/Amir/gi
Amir, Amir, Amir, amir
let text = '.....' // همون متن بالا
let pattern = /amir/gi
let find = [...str.matchAll(pattern)]
console.log(find)
//Print: (4) [Array(1), Array(1), Array(1), Array...]
بیاید از این دوتا فلگ خارج بشیم و یه نماد دیگه داخل ریجکس یاد بگیرم. اول بزارید متن رو یه تغییری بدم :
my name amirmohammad and my friends:
amirali
amirreza
amiran
agha reza
koroshe
samir
خب چرا مثالو اینجوری تغییر دادم؟ چون میخوام یه نماد و فلگ بهتون یادم بدم
قبل از اینکه ریجکس بنویسیم بزارید بگم که اصلا توی متن بالا دنبال چی هستیم؟ اگه توجه کنید خط اول یه توضیح داره و بقیه خط ها یک اسمه؛ ما میخوایم Amir هایی رو پیدا کنیم که فقط کلمه amir ، اول جمله است
برای اینکه بخوایم مشخص کنیم amir حتما اول جمله باشه باید از نماد ^ (بهش میگن هَت) استفاده کنیم (نماد ^ ،همجا اول خط رو مشخص نمیکنه و در آموزش های بعدی میفهمید که در جای دیگه هم کاربرد داره) :
/^Amir/gi
Empty
اگه ریجکس بالا رو تست کنیم بازم به مشکل میخوریم
یعنی هیچ تطابقی بهمون نمیده ؛ چرا ؟ چون که زیرا
دلیل اینکه به ما هیچ تطابقی نمیده اینه که ریجکس به صورت پیشفرض مولتی لاین نیست (یعنی اگر از ^ استفاده کنید فقط خط اول رو به عنوان اول خط میشناسه و بقیه خط هارو حساب نمیکنه
حالا برای اینکه این قابلیت رو هم روشن کنیم
/Amir/gim
amir, amir, amir
حالا با ریجکس بالا همه اسم هایی که فقط با amir شروع میشن و اول خط هستن رو به دست آوردیم
برای امروز بسه
با ما همراه باشید تا آموزش بعدی
#regex #regular_expression
#regex_2
Please open Telegram to view this post
VIEW IN TELEGRAM
regex101
regex101: build, test, and debug regex
Regular expression tester with syntax highlighting, explanation, cheat sheet for PHP/PCRE, Python, GO, JavaScript, Java, C#/.NET, Rust.
⚡17❤🔥6🔥5