Regex Tester

تستر Regex

ساخت و آزمایش عبارات منظم با هایلایت زنده تطبیق‌ها، capture group ها و حالت جایگزینی. سبک JavaScript، کاملاً در مرورگر شما اجرا می‌شود.

regex جاوا اسکریپت / ECMAScript (همان موتوری که مرورگر شما برای RegExp بومی استفاده می‌کند). این یک ابرمجموعه دقیق از POSIX است و در ویژگی‌های رایج با Python re، Java Pattern و PCRE هم‌پوشانی زیادی دارد. تفاوت‌هایی که باید مراقب آن‌ها باشید: JavaScript از lookahead/lookbehind، گروه‌های نام‌دار (از طریق /(?...)/) و فلگ‌های /u و /y پشتیبانی می‌کند. اما از quantifier های مالکانه (a++، a*+)، گروه‌های اتمی ((?>...))، یا گروه‌های branch-reset پشتیبانی نمی‌کند — آن‌ها فقط مخصوص PCRE هستند.

خیر. کل ابزار JavaScript درون این صفحه است. کامپایل الگو، تطبیق و جایگزینی همگی در مرورگر شما از طریق سازنده RegExp بومی اجرا می‌شوند. DevTools ← Network را باز کنید و تماشا کنید — هیچ درخواستی هنگام تایپ ارسال نمی‌شود. ایمن برای چسباندن regex هایی که با لاگ‌های production، ایمیل‌های مشتری یا هر چیز دیگری که نمی‌خواهید یک ابزار سرور آن را ثبت کند تطبیق می‌یابند.

/ /
تطبیق‌ها
توضیح
راهنمای regex
. هر کاراکتری (به جز خط جدید؛ با فلگ /s، خط جدید نیز)
\d هر رقم (0-9)
\D هر چیزی به جز رقم
\w کاراکتر کلمه (a-z, A-Z, 0-9, _)
\W کاراکتر غیر کلمه
\s فضای خالی (space، tab، خط جدید)
\S غیر فضای خالی
\b مرز کلمه
^ $ ابتدا / انتهای رشته (یا خط، با فلگ /m)
* صفر یا بیشتر از عنصر قبلی
+ یک یا بیشتر از عنصر قبلی
? صفر یا یک از عنصر قبلی (اختیاری)
{n,m} بین n و m از عنصر قبلی
(...) capture group — در $1، $2، … ذخیره می‌شود
(?:...) گروه بدون capture — مفید برای جایگزینی بدون ذخیره‌سازی
(?<n>...) capture group نام‌دار — به صورت $<n> ارجاع داده می‌شود
[abc] کلاس کاراکتر — هر یک از a، b یا c
[^abc] کلاس کاراکتر منفی — هر کاراکتری به جز a، b، c
a|b جایگزینی — تطبیق با a یا b
(?=...) lookahead مثبت — در ادامه دارای
(?!...) lookahead منفی — در ادامه نداشتن
(?<=...) lookbehind مثبت — در ابتدا دارای
(?<!...) lookbehind منفی — در ابتدا نداشتن
$1 $<n> backreference در رشته جایگزینی — شماره‌دار یا نام‌دار

چرا تستر Regex iKit

ساخته شده برای توسعه‌دهندگانی که زمین بازی regex تمیز و سریع می‌خواهند، بدون تبلیغات، پاپ‌آپ یا ردیاب‌های شخص ثالث ابزارهای قدیمی.

هایلایت زنده تطبیق

الگوی خود را تایپ کنید و هر تطبیق را در رشته آزمایشی به‌صورت بلادرنگ هایلایت‌شده ببینید. capture group ها در کنار آن همراه با محدوده شاخص و محتوا فهرست می‌شوند.

تطبیق + جایگزینی در یک ابزار

به حالت جایگزینی بروید تا نتیجه String.replace را پیش‌نمایش کنید، با پشتیبانی کامل از backreference های شماره‌دار $1/$2، گروه‌های نام‌دار $، و $& برای کل تطبیق.

تمام شش فلگ JavaScript

فلگ‌های global، case-insensitive، multiline، dotall، unicode و sticky را به‌صورت چیپ تغییر دهید — همان فلگ‌های RegExp بومی، بدون شگفتی هنگام انتقال الگوی شما به کد.

الگوهای از پیش تعریف‌شده رایج

پیش‌تنظیم‌های یک‌کلیکی برای ایمیل، URL، IPv4، تلفن، تاریخ، رنگ hex و UUID — هر یک با یک رشته آزمایشی نمونه تا دقیقاً ببینید چه چیزی تطبیق می‌یابد.

راهنمای داخلی

شبکه مرجع سریع برای کلاس‌های کاراکتر، quantifier ها، anchor ها، گروه‌ها و lookaround ها — قابل جمع‌شدن، در دسترس وقتی نیاز دارید و پنهان وقتی نیاز ندارید.

حریم خصوصی از طراحی

الگو، رشته آزمایشی و جایگزین همگی در مرورگر شما باقی می‌مانند. در DevTools ← Network قابل تأیید است: هیچ درخواستی هنگام تایپ ارسال نمی‌شود. ایمن برای لاگ‌های production و داده‌های مشتری.

تطبیق regex واقعاً چگونه کار می‌کند

عبارات منظم مانند نویز خط به نظر می‌رسند اما موتور پشت آن‌ها سرراست است.

  1. 1

    کامپایل الگو

    وقتی /foo/ را در JavaScript می‌نویسید یا new RegExp('foo') را فراخوانی می‌کنید، موتور الگوی شما را به یک خودکار داخلی تجزیه می‌کند — یک ماشین حالت که می‌داند چگونه در متن ورودی حرکت کند. کامپایل یک‌باره است؛ تطبیق سریع است.

  2. 2

    حرکت در رشته ورودی

    موتور یک مکان‌نما را در رشته آزمایشی شما حرکت می‌دهد. در هر موقعیت، تلاش می‌کند مسیر خودکار را دنبال کند. کاراکتری که حالت فعلی را برآورده می‌کند هر دو مکان‌نما را پیش می‌برد؛ عدم تطبیق به نقطه تصمیم قبلی برمی‌گردد و شاخه دیگری را امتحان می‌کند.

  3. 3

    capture group ها

    پرانتز در الگو یک capture group باز می‌کند: وقتی موتور با موفقیت درون آن‌ها تطبیق می‌یابد، آنچه را که تطبیق یافته به خاطر می‌سپارد، با شاخص $1، $2 و غیره. گروه‌های نام‌دار (?<n>...) تحت یک نام ذخیره می‌کنند. این capture ها در فیلد groups شیء تطبیق ظاهر می‌شوند.

  4. 4

    جایگزینی با backreference

    String.replace(regex, replacement) همان تطبیق‌ها را طی می‌کند اما به جای بازگرداندن آن‌ها، رشته جایگزین را درج می‌کند. $1 در جایگزین، مقدار واقعی گرفته‌شده توسط گروه ۱ است — بنابراین می‌توانید 2024-01-15 را به 15/01/2024 با یک regex بازقالب‌بندی کنید.

وظایف رایج regex

موقعیت‌های واقعی که در آن‌ها به یک تستر regex مراجعه می‌کنید.

اعتبارسنجی فرمت‌های ایمیل یا URL

در تستر یک الگو بسازید، ورودی‌های نمونه را بچسبانید (هم موارد واقعی و هم موارد لبه‌ای)، و دقیقاً ببینید چه چیزی تطبیق می‌یابد قبل از اینکه آن را به اعتبارسنجی فرم خود متعهد کنید. الگوهای از پیش تعریف‌شده نقطه شروعی منطقی به شما می‌دهند که ۹۵٪ ورودی‌های دنیای واقعی را پوشش می‌دهد.

تمیز کردن داده‌های لاگ

آیا یک فایل لاگ با مهرهای زمانی مختلط، کدهای رنگ ANSI و آدرس‌های IP دارید که می‌خواهید پوشانده شوند؟ از حالت جایگزینی با الگویی مانند \b(?:\d{1,3}\.){3}\d{1,3}\b و جایگزین [REDACTED] استفاده کنید — نتیجه را قبل از اجرای آن از طریق sed روی فایل واقعی پیش‌نمایش کنید.

بازآرایی کد با find-and-replace regex

find-and-replace IDE شما از regex پشتیبانی می‌کند اما پیش‌نمایش زنده در چندین مورد آزمایشی به شما نشان نمی‌دهد. ابتدا الگو را در اینجا با خطوط نمونه از کد خود بسازید، capture ها و جایگزینی را تأیید کنید، سپس regex کارا را در VS Code / IntelliJ بچسبانید.

استخراج داده‌های ساختاریافته

نیاز دارید هر آدرس ایمیل را از یک تخلیه مخاطبین، یا هر مقدار دلاری را از یک رسید استخراج کنید؟ regex تطبیق را در iKit بسازید، آن را در یک اسکریپت تک‌خطی (text.matchAll(re)) کپی کنید، و یک کار تجزیه موقتی را به ده خط کد تبدیل کرده‌اید.

چرا تست regex محلی اهمیت دارد

الگوهای regex اغلب اطلاعات حساس را رمزگذاری می‌کنند: ساختار شناسه‌های مشتری، نقاط پایانی API داخلی، قوانین رمز عبور، یا فیلدهای PII که می‌خواهید پنهان کنید. چسباندن آن‌ها در ابزار سمت سرور — و چسباندن داده‌های آزمایشی واقعی در کنار آن — هم الگو و هم ورودی‌ها را افشا می‌کند. تستر regex iKit یک JavaScript است که از قبل در تب مرورگر شما بارگذاری شده است.

  • صفر درخواست شبکه در طول تطبیق یا جایگزینی — قابل تأیید در DevTools.
  • الگوها و رشته‌های آزمایشی در حافظه مرورگر باقی می‌مانند؛ با Clear یا تازه‌سازی صفحه پاک می‌شوند.
  • ایمن برای الگوهای پنهان‌سازی لاگ production، اعتبارسنجی داده‌های مشتری و regex های حساس به امنیت.

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

آموزش‌های عمیق و مقایسه ابزارها از وبلاگ iKit.

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

این ابزار از کدام سبک regex پشتیبانی می‌کند؟

regex جاوا اسکریپت / ECMAScript (همان موتوری که مرورگر شما برای RegExp بومی استفاده می‌کند). این یک ابرمجموعه دقیق از POSIX است و در ویژگی‌های رایج با Python re، Java Pattern و PCRE هم‌پوشانی زیادی دارد. تفاوت‌هایی که باید مراقب آن‌ها باشید: JavaScript از lookahead/lookbehind، گروه‌های نام‌دار (از طریق /(?...)/) و فلگ‌های /u و /y پشتیبانی می‌کند. اما از quantifier های مالکانه (a++، a*+)، گروه‌های اتمی ((?>...))، یا گروه‌های branch-reset پشتیبانی نمی‌کند — آن‌ها فقط مخصوص PCRE هستند.

آیا الگوها یا رشته‌های آزمایشی من به جایی آپلود می‌شوند؟

خیر. کل ابزار JavaScript درون این صفحه است. کامپایل الگو، تطبیق و جایگزینی همگی در مرورگر شما از طریق سازنده RegExp بومی اجرا می‌شوند. DevTools ← Network را باز کنید و تماشا کنید — هیچ درخواستی هنگام تایپ ارسال نمی‌شود. ایمن برای چسباندن regex هایی که با لاگ‌های production، ایمیل‌های مشتری یا هر چیز دیگری که نمی‌خواهید یک ابزار سرور آن را ثبت کند تطبیق می‌یابند.

تفاوت بین $1 و $<name> در جایگزینی چیست؟

هر دو backreference در رشته جایگزینی هستند. $1، $2، … به capture group های شماره‌دار به ترتیب ظاهرشان در الگو ارجاع می‌دهند — (foo)(bar) باعث می‌شود $1 = 'foo'، $2 = 'bar' باشد. $ به یک capture group نام‌دار اعلام‌شده به‌صورت (?...) ارجاع می‌دهد — خواناتر است و در صورت تغییر ترتیب گروه‌ها در الگو پایدار می‌ماند. JavaScript همچنین $& (کل تطبیق)، $` (متن قبل از تطبیق) و $' (متن بعد از تطبیق) را دارد.

چرا lookbehind من کار نمی‌کند؟

lookbehind های (?<=...) و (?

چگونه ایموجی، حروف دارای علامت یا خطوط غیرلاتین را match کنم؟

flag /u (unicode) را روشن کنید، سپس از Unicode property escapes داخل pattern استفاده کنید. `\p{L}` با هر حرفی match می‌شود — از جمله ñ، é، 中، ก، ا. `\p{N}` با هر رقمی match می‌شود، از جمله اعداد غیرلاتین مانند ٠-٩. `\p{Emoji}` با code points ایموجی match می‌شود. بدون /u، همان pattern روی emoji با surrogate pair (هر چیزی خارج از BMP) به‌صورت خاموش fail می‌شود و حروف دارای علامت را به‌عنوان base + combining marks جداگانه در نظر می‌گیرد. flag /u به موتور می‌گوید ورودی شما را به‌عنوان Unicode code points تفسیر کند، نه UTF-16 code units خام — بنابراین بیشتر باگ‌های regex میان‌زبانی با یک toggle ناپدید می‌شوند.