RevealTheme logo

آزمونگر عبارت‌های منظم

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

0 تطابق

نحوه استفاده از این ابزار

  1. 1

    Type your regular expression into the pattern field (no slashes — enter the bare pattern).

  2. 2

    Set the flags in the small field beside it, such as g, i, m, or a combination like gi.

  3. 3

    Paste or type the text you want to search into the large input box below.

  4. 4

    Read the match count and each matched substring with its character index in the results panel; an invalid pattern shows the engine's error message instead.

عبارت‌های منظم چیستند و چگونه خوانده می‌شوند؟

عبارت‌های منظم (regex) یک زبان کوچک ویژه دامنه برای جستجوی الگوها در متن هستند. هر زبان برنامه‌نویسی مدرنی یک موتور regex دارد؛ این ابزار از RegExp بومی JavaScript استفاده می‌کند که از مشخصات ECMAScript 2018+ پیروی می‌کند و از قابلیت‌های مدرنی مانند اظهارات lookbehind، گروه‌های ضبط نام‌دار، گریزهای ویژگی Unicode و پرچم dotAll پشتیبانی می‌کند. بلوک‌های پایه: کاراکترهای تحت‌اللفظی با خودشان تطبیق می‌یابند (regex 'گربه' با کلمه گربه تطبیق می‌یابد)؛ کلاس‌های کاراکتری با هر یک از یک مجموعه تطبیق می‌یابند ('[a-z]' با حروف کوچک تطبیق می‌یابد)؛ کمیت‌نماها تکرار را کنترل می‌کنند (* صفر یا بیشتر، + یک یا بیشتر، ? صفر یا یک، {3,5} بین ۳ تا ۵)؛ لنگرها با موقعیت‌ها تطبیق می‌یابند (^ آغاز رشته، $ پایان، \b مرز کلمه)؛ گروه‌ها زیرتطبیق‌ها را ضبط می‌کنند ((گربه|سگ) با هر یک تطبیق می‌یابد و ضبط می‌کند کدام‌یک)؛ تناوب (alternation) امکان انتخاب می‌دهد. regex برای تحلیل متن ساختاریافته اما غیردستوری (گزارش‌ها، ایمیل‌ها، شماره‌های تلفن، صفت‌های ساده HTML) می‌درخشد و در برابر ساختارهای واقعاً بازگشتی (HTML کامل، JSON تودرتو) شکست می‌خورد. برای آن‌ها از یک تحلیل‌گر (parser) استفاده کنید. این آزمونگر به شما اجازه می‌دهد با بازخورد آنی روی یک الگو تکرار کنید: regex را تغییر دهید و تطبیق‌ها با هر ضربه‌کلید دوباره محاسبه می‌شوند.

موارد استفاده رایج

  • قالب ورودی کاربر (ایمیل، شماره تلفن، کد پستی) را پیش از ارسال به سرور خود اعتبارسنجی کنید.

  • داده‌ی ساختاریافته را از فایل‌های گزارش استخراج کنید (مُهرهای زمانی، IPها، کدهای وضعیت، مسیرهای درخواست).

  • با جست‌وجوی regex ویرایشگر خود، در صدها فایل جست‌وجو و جایگزینی انجام دهید.

  • قواعد بازنویسی URL برای Nginx، Apache .htaccess یا بازنویسی‌های Vercel بنویسید.

  • قالب‌های ساده‌ی شبیه به CSV را که استفاده از تجزیه‌گر واقعی برایشان زیاده‌روی است، تجزیه کنید.

  • الگوهای اعتبارسنجی فرم برای ویژگی <input pattern="..."> در HTML بسازید.

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

چه پرچم‌هایی پشتیبانی می‌شوند؟
g (سراسری: همه تطبیق‌ها را پیدا می‌کند، نه فقط اولی)، i (بدون حساسیت به بزرگی و کوچکی حروف)، m (چندخطی: ^ و $ با شکست خط تطبیق می‌یابند)، s (dotAll: . با شکست خط تطبیق می‌یابد)، u (unicode: مدیریت درست کاراکترهای چندبایتی)، y (sticky: فقط در lastIndex تطبیق می‌یابد). پرچم‌ها را با به‌هم‌چسباندن ترکیب کنید: 'gim' سراسری + بدون حساسیت به حروف + چندخطی را فعال می‌کند.
چگونه در چند خط تطبیق دهم؟
دو نیاز متمایز: 'm' باعث می‌شود ^ و $ با شکست خط تطبیق یابند (هر خط را برای لنگرها به‌عنوان یک رشته جداگانه در نظر می‌گیرد). 's' باعث می‌شود . با شکست خط تطبیق یابد (در غیر این صورت . با همه چیز جز شکست خط تطبیق می‌یابد). اگر نیاز دارید با الگوهایی که چند خط را در بر می‌گیرند تطبیق دهید، هر دو را با هم به‌کار ببرید.
تفاوت میان کمیت‌نماهای حریص و تنبل چیست؟
کمیت‌نماهای حریص (*، +، {n,m}) تا حد ممکن بیشترین مقدار را تطبیق می‌دهند. تنبل‌ها (*?، +?، {n,m}?) تا حد ممکن کمترین مقدار را تطبیق می‌دهند. مثال کلاسیک: regex '<.*>' روی '<a><b>' با کل '<a><b>' تطبیق می‌یابد؛ '<.*?>' فقط با '<a>' تطبیق می‌یابد.
چه زمانی نباید از regex استفاده کنم؟
زمانی که ساختار واقعاً بازگشتی است (HTML، JSON، پرانتزهای متوازن). زمانی که باید هر حالت مرزی را به‌درستی مدیریت کنید (تحلیل تاریخ‌ها با منطقه‌های زمانی، نام‌هایی با آپوستروف). زمانی که دستور زبان ورودی به‌خوبی تعریف شده و یک کتابخانه تحلیل وجود دارد. پاسخ مشهور Stack Overflow: regex برای پیدا کردن الگوها عالی است، برای تحلیل زبان‌ها وحشتناک.
گروه‌های ضبط نام‌دار چیستند؟
به‌جای آنکه (\d{4})-(\d{2})-(\d{2}) گروه‌های شماره‌گذاری‌شده برگرداند، از (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) استفاده کنید و به تطبیق‌ها مانند match.groups.year دسترسی یابید. در کد واقعی بسیار قابل نگهداری‌تر است.
چرا regex من با ورودی‌های خاصی کند است؟
عقب‌گرد فاجعه‌بار (catastrophic backtracking). کمیت‌نماهای تودرتو مانند (a+)+ می‌توانند با ورودی‌های خصمانه زمان نمایی ببرند. از کمیت‌نماهای تودرتو و تناوب‌های هم‌پوشان بپرهیزید. موتور JavaScript مهلت زمانی ندارد، بنابراین یک regex بد می‌تواند یک درخواست را معلق کند. برای محیط تولید، از بسته npm به‌نام safe-regex برای شناسایی الگوهای پرخطر استفاده کنید.
آیا این با کاری که موتور regex سرور من انجام می‌دهد تطبیق دارد؟
بیشتر اوقات: گونه‌های اصلی regex (PCRE، re در Python، regex در Ruby، Java) مشابه‌اند اما تفاوت‌های ظریفی دارند. نحو lookbehind، رفتار کلاس‌های کاراکتری و مدیریت Unicode متفاوت است. برای هم‌سانی در محیط تولید، آن را در زبان مقصد نیز آزمایش کنید.

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

کدگشای JWT

توکن‌های JSON Web Token (JWT) را فوراً کدگشایی کنید. در مرورگر شما اجرا می‌شود: توکن‌ها هرگز از دستگاه شما خارج نمی‌شوند، پس استفاده از آن با اسرار محیط تولید (production) امن است.

قالب‌بند و اعتبارسنج JSON

JSON را به‌صورت آنلاین قالب‌بندی، اعتبارسنجی و فشرده کنید. کاملاً در مرورگر شما کار می‌کند: داده‌های شما هرگز دستگاهتان را ترک نمی‌کنند.

قالب‌بند XML

اسناد XML را قالب‌بندی و زیبا کنید. مفید برای SOAP، نقشه‌های سایت، فیدهای RSS و فایل‌های پیکربندی.

کدگذار و کدگشای Base64

رشته‌ها را به Base64 کدگذاری یا Base64 را به متن کدگشایی کنید. به حریم خصوصی شما احترام می‌گذارد: در مرورگر شما اجرا می‌شود.

کدگذار و کدگشای URL

متن را به کدگذاری امن برای URL (کدگذاری درصدی) و برعکس تبدیل کنید. مفید برای رشته‌های پرس‌وجو، تغییر مسیرها و جریان‌های OAuth.

کدگذار و کدگشای موجودیت‌های HTML

کاراکترهای خاص را به موجودیت‌های HTML (&amp;، &lt; و غیره) و برعکس تبدیل می‌کند. برای جای‌دادن امن متن در HTML مفید است.