نحوه نوشتن Regex بدون نوشتن regex
میدانم نوشتن regex آنقدرها هم سخت نیست، اما بدون شک یکی از خستهکنندهترین کارهای دنیاست و اگر آن را درک نکنید، بسیار خستهکننده است. بنابراین امروز به شما تقدیم می کنم، magic-regexp
این کتابخانه به شما این امکان را می دهد که عبارات منظم با یک نحو بسیار طبیعی و بصری ایجاد کنید.
ابتدا باید آن را نصب کنیم
npm install magic-regexp
اکنون، بیایید یک آرایه ایجاد کنیم که بتوانیم عبارات خود را آزمایش کنیم
const stringsToParse = [
"id: 123",
"there is no id",
"random string id: 1",
"[INFO] id: 12",
"id: 1a",
"random log info id: 4b93H6Hd random log",
"id: 4b93H6Hd"
]
مورد اول
اولین مورد ما یک مورد ساده خواهد بود، فقط با رشته “id:” مطابقت دهید.
import { createRegExp, exactly } from 'magic-regexp'
const regex = createRegExp(
exactly('id: ')
)
میبینیم که تقریباً همه رشتهها با regex ما مطابقت دارند، فقط رشته دوم حاوی رشته دقیق “id:” نیست.
مورد دوم
بیایید کاری پیچیده تر انجام دهیم. بیایید دوباره کلمه “id:” را پیدا کنیم، اما اکنون می خواهیم یک حرف یا رقم به دنبال آن باشد و طول آن بین 2 تا 6 باشد.
import { createRegExp, exactly, letter, digit } from 'magic-regexp'
const regex = createRegExp(
exactly('id: ')
.and(letter.or(digit).times.between(2, 6))
)
همانطور که می بینید، کلمه سوم مطابقت نداشت زیرا عدد بعد از شناسه فقط شامل یک حرف/رقم است.
مورد سوم
بنابراین، اجازه دهید یک چیز دیگر را در اینجا اضافه کنیم .at.lineStart()
. همانطور که از نامش میگوید، فقط به رشتهای اهمیت میدهد که در ابتدا وضعیت شما در آن قرار دارد.
import { createRegExp, exactly, letter, digit } from 'magic-regexp'
const regex = createRegExp(
exactly('id: ')
.at.lineStart()
.and(letter.or(digit).times.between(2, 6))
)
همانطور که می بینید، فقط آنهایی که با شرایط قبلی مطابقت دارند و آنهایی که با “id:” ما شروع می شوند، با شرایط مطابقت دارند.
مورد چهارم
بیایید همه چیز را کمی جلوتر ببریم. بیایید اضافه کنیم .at.lineEnd()
. همانطور که از نامش میگوید، فقط به دنبال آنهایی است که در انتهای خط هستند. توجه داشته باشید که ما این را در داخل and()
تابع.
import { createRegExp, exactly, letter, digit } from 'magic-regexp'
const regex = createRegExp(
exactly('id: ')
.at.lineStart()
.and(letter.or(digit).times.between(2, 6).at.lineEnd())
)
با این شرط خاص، تنها دو رشته این شرط را برآورده می کند.
خلاصه
همانطور که می بینید، نوشتن عبارات منظم با زبان طبیعی تر بسیار آسان تر است، اگر تجربه ای با regex نداشته باشید. کارهای زیادی وجود دارد که می توانید با این کتابخانه انجام دهید، می توانید مستقیماً اسناد را بررسی کنید.
یک الهام بزرگ برای این پست، از این ویدیوی یوتیوب آمده است، بنابراین اگر چیزی بصری تر می خواهید آن را بررسی کنید 🙂