تست‌کنندهٔ Regex برای JavaScript

یک عبارت منظم تایپ کنید و همزمان با تایپ همهٔ تطابق‌ها را برجسته ببینید، همراه با گروه‌های گیرنده، پیش‌نمایش جایگزینی و کتابخانه‌ای از الگوهای آماده.

اجرا در مرورگر شمابدون ثبت‌نامبدون آپلود

تطابق‌های برجسته‌شده

    
از $1، $<name>، $& (کل تطابق) استفاده کنید
جزئیات تطابق
#اندیستطابقگروه‌ها
راهنمای سریع Regex
.هر کاراکتر به‌جز خط جدید (با s هر کاراکتری)
\d \w \sرقم، کاراکتر کلمه، فاصلهٔ سفید
\D \W \Sغیر رقم، غیر کلمه، غیر فاصلهٔ سفید
[abc] [^abc]یکی از / هیچ‌کدام از a، b، c
[a-z0-9]بازهٔ کاراکتر
\p{L} \p{N}حرف / عدد یونیکد (نیازمند u)
^ $ابتدا / انتهای ورودی (یا خط، با m)
\b \Bمرز کلمه / غیر مرز
* + ?0 یا بیشتر، 1 یا بیشتر، 0 یا 1
{n} {n,} {n,m}دقیقاً n، حداقل n، بین n و m
*? +? ??تنبل (تا حد ممکن کم)
a|ba یا b
(…)گروه گیرنده، با ارجاع $1
(?<name>…)گروه نام‌دار، $<name>
(?:…)گروه غیرگیرنده
\1 \k<name>ارجاع به عقب (Backreference)
(?=…) (?!…)نگاه به جلو / نگاه به جلوی منفی
(?<=…) (?<!…)نگاه به عقب / نگاه به عقب منفی
\. \* \\کاراکترهای لفظی گریزداده‌شده
\n \t \rخط جدید، تب، بازگشت به ابتدای خط
\uFFFFواحد کد یونیکد
\u{1F600}نقطهٔ کد (نیازمند u)
$&کل تطابق در متن جایگزین
$` $'متن پیش / پس از تطابق

نحوهٔ استفاده از تست‌کنندهٔ Regex

  1. الگوی خود را بین دو اسلش وارد کنید، بدون / اطراف آن.
  2. فلگ‌هایی مانند g (همهٔ تطابق‌ها)، i (نادیده گرفتن حروف بزرگ/کوچک) و m (چندخطی) را فعال یا غیرفعال کنید.
  3. متن آزمایشی خود را جای‌گذاری کنید. تطابق‌ها در سمت چپ برجسته و در پایین با اندیس و گروه‌های گیرنده فهرست می‌شوند.
  4. جایگزینی را فعال کنید و عبارتی مانند $1 یا $<name> وارد کنید تا String.replace را پیش‌نمایش کنید.
  5. از کتابخانهٔ الگوها یک الگو انتخاب کنید تا با یک regex آزموده‌شده برای ایمیل، URL، IP یا تاریخ شروع کنید.

عبارت‌های منظم در JavaScript

این تست‌کننده از موتور RegExp خود مرورگر شما استفاده می‌کند، بنابراین نتایج دقیقاً همان چیزی است که String.match، matchAll، replace و RegExp.exec در JavaScript و Node.js برمی‌گردانند. این شامل سینتکس مدرن هم می‌شود: گروه‌های نام‌دار (?<name>…)، lookbehind (?<=…)، escapeهای ویژگی یونیکد مانند \p{L} با فلگ u و اندیس تطابق‌ها با فلگ d.

فلگ‌ها چه می‌کنند

فلگناماثر
gglobalهمهٔ تطابق‌ها را پیدا می‌کند، به‌جای توقف در اولین.
iignoreCaseحروف صرف‌نظر از بزرگ یا کوچک بودن تطبیق می‌یابند.
mmultiline^ و $ در ابتدا و انتهای هر خط تطبیق می‌یابند.
sdotAll. با شکست خط هم تطبیق می‌یابد.
uunicodeالگو را به‌صورت نقاط کد در نظر می‌گیرد؛ \p{…} و \u{…} را فعال می‌کند.
ystickyفقط در موقعیت فعلی lastIndex تطبیق می‌دهد.
dhasIndicesموقعیت شروع و پایان هر گروه گیرنده را گزارش می‌کند.

محافظت در برابر بک‌ترکینگ فاجعه‌بار

الگوهایی با کمیت‌سنج‌های تودرتو، مانند (a+)+$ یا (\w|\d)*x، روی ورودی‌هایی که تقریباً تطبیق می‌یابند ممکن است زمان نمایی بگیرند. در یک صفحهٔ وب معمولی این کار تب را منجمد می‌کند. اینجا هر تطابق در یک Web Worker پس‌زمینه اجرا می‌شود که پس از یک ثانیه متوقف می‌شود و به‌جای مرورگر قفل‌شده یک هشدار واضح می‌گیرید. همین الگو در کد production می‌تواند یک آسیب‌پذیری ReDoS باشد، پس هشدار را باگی بدانید که باید رفع شود.

نکاتی برای نوشتن regex بهتر

  • هنگام اعتبارسنجی کل مقدار، الگو را با ^ و $ مهار کنید، وگرنه تطابق در هر جای رشته قبول می‌شود.
  • کلاس‌های مشخص مانند [^"]* را به .* ترجیح دهید؛ سریع‌ترند و از تطابق بیش از حد جلوگیری می‌کنند.
  • وقتی به مقدار گرفته‌شده نیاز ندارید، از گروه‌های غیرگیرنده (?:…) استفاده کنید.
  • گروه‌های خود را نام‌گذاری کنید. خواندن match.groups.year از match[1] آسان‌تر است.

پرسش‌های متداول

این تست‌کننده از کدام نوع regex استفاده می‌کند؟
JavaScript (ECMAScript)، از طریق RegExp داخلی مرورگر شما. بیشتر سینتکس با PCRE، Python و Java مشترک است، اما ویژگی‌هایی مانند کمیت‌سنج‌های possessive، گروه‌های اتمی و modifierهای درون‌خطی مانند (?i) در JavaScript وجود ندارند.
چرا الگوی من فقط یک تطابق پیدا می‌کند؟
بدون فلگ g (global)، JavaScript پس از اولین تطابق متوقف می‌شود. برای یافتن همهٔ موارد g را فعال کنید.
چطور در متن جایگزین به گروه‌ها ارجاع دهم؟
از $1، $2… برای گروه‌های شماره‌دار، $<name> برای گروه‌های نام‌دار، $& برای کل تطابق و $$ برای علامت دلار واقعی استفاده کنید.
چرا تست‌کننده با timeout متوقف شد؟
الگو روی ورودی شما بیش از یک ثانیه طول کشید که تقریباً همیشه یعنی بک‌ترکینگ فاجعه‌بار. به دنبال کمیت‌سنج‌های تودرتو مانند (x+)+ یا گزینه‌های هم‌پوشان مانند (a|a)* بگردید و آن‌ها را طوری بازنویسی کنید که هر کاراکتر فقط به یک روش تطبیق یابد.
آیا داده‌های آزمایشی من جایی ارسال می‌شوند؟
خیر. تطبیق به‌صورت محلی در یک Web Worker داخل مرورگر شما اجرا می‌شود. الگو و متن شما فقط در مرورگر خودتان ذخیره می‌شوند تا وقتی برمی‌گردید هنوز آنجا باشند.

ابزارهای مرتبط