ابزار رایگان · بدون ثبت‌نام

فقط در مرورگر شما؛ چیزی ارسال نمی‌شود

تست Regex آنلاین (طعم JavaScript)

الگوی عبارت باقاعده را بنویسید تا مطابقت‌ها همزمان روی متن شما رنگی شوند و گروه‌های گرفته‌شده جدا نمایش داده شوند. اجرا با موتور RegExp جاوااسکریپت مرورگر است و الگوی پرعقب‌گرد پس از ۲ ثانیه متوقف می‌شود تا صفحه قفل نکند.

الگوهای آماده

الگو را بدون اسلش‌های دو طرف بنویسید. Esc الگو را پاک می‌کند.

فلگ‌ها

نتیجه

در حال اجرا… مطابقت (بدون g فقط اولی)

فقط ۱٬۰۰۰ مطابقت اول رنگی می‌شوند.

مطابقت‌ها و گروه‌ها

راهنمای کامل

راهنمای کامل عبارت باقاعده (Regex) و تست آنلاین آن

عبارت باقاعده یا Regex زبان کوچکی برای توصیف الگوی متن است: «هر چیزی که شبیه ایمیل است»، «شماره‌ای که با ۰۹ شروع می‌شود و یازده رقم دارد» یا «خط‌هایی از لاگ که کد وضعیت ۵۰۰ دارند». ابزار تست Regex ایران‌کلاد الگو را با موتور RegExp خود مرورگر روی متن نمونه اجرا می‌کند و هر مطابقت را همان لحظه رنگی می‌کند. این راهنما توضیح می‌دهد ابزار دقیقاً چه کاری انجام می‌دهد، کجا به کارتان می‌آید، چه تفاوتی بین طعم‌های مختلف Regex وجود دارد و چطور الگویی بنویسید که روی متن فارسی هم درست کار کند.

۹ بخش حدود ۸ دقیقه مطالعه

فهرست مطالب

تست Regex آنلاین چیست و به درد چه کسی می‌خورد؟

Regex مخفف Regular Expression است و در فارسی به آن «عبارت باقاعده» یا «عبارت منظم» می‌گویند. با آن می‌توان در متن جست‌وجو کرد، ورودی کاربر را اعتبارسنجی کرد یا بخشی از یک رشته را بیرون کشید. مشکل این است که الگوهای Regex خیلی زود ناخوانا می‌شوند و یک بک‌اسلش جاافتاده کل نتیجه را عوض می‌کند. به همین دلیل بیشتر برنامه‌نویس‌ها قبل از اینکه الگو را در کد بگذارند، آن را روی چند نمونهٔ واقعی امتحان می‌کنند.

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

مخاطب اصلی توسعه‌دهندگان وب، مدیران سرور که با لاگ کار می‌کنند، تحلیل‌گران داده و دانشجویانی هستند که تازه Regex یاد می‌گیرند. نه ثبت‌نام لازم است و نه نصب چیزی؛ صفحه را باز می‌کنید و شروع می‌کنید.

کاربردهای رایج Regex در کار روزمره

بیشترین استفادهٔ Regex در اعتبارسنجی فرم‌هاست: بررسی اینکه ایمیل، کد پستی، شمارهٔ موبایل یا نام کاربری قالب درستی دارد. کاربرد بزرگ دوم جست‌وجو و استخراج است؛ مثلاً بیرون کشیدن همهٔ آدرس‌های IP از یک فایل لاگ یا پیدا کردن همهٔ شناسه‌های سفارش در یک گزارش. در ویرایشگرهای کد هم جایگزینی گروهی با Regex کارهایی را که دستی یک ساعت طول می‌کشد در چند ثانیه انجام می‌دهد.

روی سرور هم Regex همه‌جا هست: در دستور grep برای فیلتر لاگ، در قوانین location وب‌سرور Nginx، در قواعد بازنویسی آدرس و در ابزارهایی که لاگ را برای الگوهای حمله بررسی می‌کنند. اگر روی سرور ابری خودتان Nginx نصب کرده‌اید، تست الگوی location پیش از بارگذاری دوبارهٔ پیکربندی از خطای ۴۰۴ ناخواسته جلوگیری می‌کند.

  • اعتبارسنجی ورودی فرم‌ها (ایمیل، موبایل، کد ملی، کد پستی)
  • استخراج IP، تاریخ یا کد خطا از فایل‌های لاگ
  • نوشتن قوانین location و rewrite در وب‌سرور
  • جایگزینی گروهی در ویرایشگر کد و اسکریپت‌های پاک‌سازی داده
  • فیلتر کردن نتایج در ابزارهای مانیتورینگ و هشدار
  • پیدا کردن شناسه‌هایی مثل UUID یا توکن JWT در متن

بازگشت به فهرست مطالب

ابزار تست Regex ایران‌کلاد دقیقاً چه چیزی را نشان می‌دهد؟

ابزار چهار بخش دارد. اول، دکمه‌های «الگوهای آماده» که با یک کلیک الگو، فلگ‌ها و متن نمونه را برای حالت‌های رایج پر می‌کنند: ایمیل، URL‏، IPv4، موبایل ایران، کلمهٔ فارسی، خطای ۵xx در لاگ، تاریخ ISO‏، UUID، رنگ Hex و JWT. دوم، کادر الگو همراه با پنج فلگ g‏، i‏، m‏، s و u. سوم، کادر متن آزمایشی. و چهارم، بخش نتیجه که متن را با مطابقت‌های رنگی نشان می‌دهد، تعداد مطابقت‌ها را می‌شمارد و الگو را به شکل لیترال جاوااسکریپت مثل /الگو/فلگ‌ها برای کپی آماده می‌کند.

زیر نتیجه، فهرست مطابقت‌ها با شمارهٔ ردیف، موقعیت شروع (اندیس از صفر، به همان شیوهٔ شمارش خود JavaScript) و مقدار مطابقت آمده است. این فهرست ۲۰۰ مورد اول را نشان می‌دهد، هزار مطابقت اول در متن رنگی می‌شوند و شمارنده تا ده هزار مطابقت را می‌شمارد تا صفحه سنگین نشود. فلگ g دقیقاً مثل کد رفتار می‌کند: با g همهٔ مطابقت‌ها پیدا می‌شوند و بدون آن فقط اولین مطابقت، همان چیزی که exec یا match بدون g در برنامهٔ شما برمی‌گرداند.

زیر هر مطابقت، گروه‌های گرفته‌شده (capture groups) با شماره‌های $1، $2 و بعدی و گروه‌های نام‌دار مثل (?<year>…) با نام خودشان نمایش داده می‌شوند؛ گروهی که در آن مطابقت شرکت نکرده باشد «بدون مطابقت» نوشته می‌شود. آنچه ابزار ندارد قابلیت جایگزینی (replace) است؛ برای دیدن اثر جایگزینی گروهی، متن قبل و بعد را در مقایسهٔ متن کنار هم بگذارید.

بازگشت به فهرست مطالب

فلگ‌های g‏، i‏، m‏، s و u چه کاری می‌کنند؟

فلگ‌ها رفتار موتور را تغییر می‌دهند بی‌آنکه الگو عوض شود. انتخاب اشتباه فلگ یکی از رایج‌ترین دلیل‌های «در ابزار کار می‌کرد ولی در کد نه» است، پس ارزش دارد هرکدام را دقیق بشناسید. جدول زیر خلاصهٔ رفتار هر فلگ در JavaScript است.

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

برای متن فارسی تقریباً همیشه فلگ u را روشن کنید؛ بدون آن کلاس‌هایی مثل \p{L} کار نمی‌کنند و ایموجی‌ها دو کاراکتر شمرده می‌شوند.

بازگشت به فهرست مطالب

نوشتن Regex برای متن فارسی: دام‌های رایج

بزرگ‌ترین دام این است که \w در JavaScript فقط حروف و ارقام لاتین و زیرخط را می‌شناسد و حروف فارسی را حرف حساب نمی‌کند، حتی با فلگ u. پس الگوی \w+ کلمهٔ «سلام» را پیدا نمی‌کند. راه درست استفاده از کلاس‌های یونیکد با فلگ u است: \p{L} برای هر حرفی در هر زبان، یا \p{Script=Arabic} برای حروفی که در خط عربی و فارسی به کار می‌روند.

دام دوم ارقام است. \d فقط ۰ تا ۹ لاتین را می‌شناسد. اگر کاربر شماره را با صفحه‌کلید فارسی تایپ کند، ارقام فارسی (U+06F0 تا U+06F9) یا گاهی ارقام عربی (U+0660 تا U+0669) وارد می‌شوند. الگوی امن برای رقم در فرم‌های ایرانی چیزی مثل ⁦[0-9۰-۹٠-٩]⁩ است، یا بهتر اینکه ورودی را پیش از اعتبارسنجی به ارقام لاتین تبدیل کنید.

دام سوم حروف هم‌شکل است: «ی» و «ک» فارسی با «ي» و «ك» عربی کد متفاوتی دارند و ظاهرشان یکی است. جست‌وجوی «کیف» در متنی که با صفحه‌کلید عربی تایپ شده نتیجه نمی‌دهد. نیم‌فاصله (U+200C) هم بخشی از کلمه است؛ اگر الگوی شما کلمه را با \s یا فاصله جدا می‌کند، «می‌شود» را یک کلمه حساب کنید نه دو کلمه.

  • حروف فارسی: [\u0600-\u06FF] یا \p{Script=Arabic} با فلگ u
  • ارقام فارسی و لاتین با هم: ⁦[0-9۰-۹]⁩
  • موبایل ایران با پیشوند اختیاری: ⁦(?:\+98|0098|0)9\d{9}⁩
  • پیش از مقایسه، ي و ك عربی را به ی و ک فارسی تبدیل کنید

یک نکتهٔ عملی دربارهٔ \b: مرز کلمه فقط بین کاراکتر «کلمه‌ای» لاتین و غیر آن معنا دارد. \b پیش از علامت + کار نمی‌کند، چون + و فاصلهٔ قبلش هر دو غیرکلمه‌ای‌اند. برای همین الگوی شمارهٔ موبایل را بدون \b در ابتدا بنویسید یا از lookbehind منفی مثل ⁦(?<![0-9])⁩ استفاده کنید.

بازگشت به فهرست مطالب

تفاوت Regex در JavaScript‏، PHP‏، Python و Go

Regex یک استاندارد واحد ندارد و هر زبان «طعم» خودش را دارد. این ابزار از موتور JavaScript مرورگر استفاده می‌کند؛ پس نتیجه دقیقاً همان چیزی است که در کد فرانت‌اند یا Node.js می‌گیرید. هستهٔ مشترک (کلاس کاراکتر، کمیت‌نماها، گروه‌ها، lookahead) تقریباً در همه یکسان است، ولی در جزئیات تفاوت‌هایی هست که اگر ندانید، الگوی تست‌شده در زبان دیگر رفتار متفاوتی نشان می‌دهد.

قابلیتJavaScriptPHP (PCRE)Python reGo (RE2)
lookbehindداردداردفقط طول ثابتندارد
ارجاع به گروه (\1)داردداردداردندارد
گروه نام‌دار(?<name>…)(?<name>…)(?P<name>…)(?P<name>…)
کمیت‌نمای possessiveندارددارداز نسخهٔ 3.11ندارد
ضمانت زمان خطینداردنداردندارددارد

اگر الگو را برای PHP یا Python می‌نویسید، از ویژگی‌های مشترک استفاده کنید و در نهایت آن را یک بار هم در خود زبان مقصد اجرا کنید.

بازگشت به فهرست مطالب

ساخت و تست یک الگو در پنج قدم

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

متن نمونه را طوری انتخاب کنید که هم موارد درست و هم موارد نادرست را داشته باشد. اگر فقط نمونه‌های درست را بگذارید، نمی‌فهمید الگو بیش از حد گشاد است. نمونه‌های آمادهٔ ابزار هم به همین شکل ساخته شده‌اند؛ مثلاً نمونهٔ IPv4 عمداً عدد ۹۹۹.۹۹۹.۹۹۹.۹۹۹ را دارد تا نشان دهد الگوی دقیق که هر بخش را به ۰ تا ۲۵۵ محدود می‌کند آن را رد می‌کند، در حالی که الگوی سادهٔ \d{1,3} آن را هم می‌پذیرفت.

  • یک نمونهٔ آماده نزدیک به نیازتان را انتخاب کنید یا الگوی ساده بنویسید
  • متن واقعی خودتان را با چند نمونهٔ نادرست در کادر متن بگذارید
  • فلگ‌ها را مطابق زبان مقصد تنظیم کنید (برای فارسی u)
  • با ^ و $ یا \b مرزها را محکم کنید و نتیجه را بررسی کنید
  • الگوی نهایی را در کد بگذارید و یک تست خودکار برایش بنویسید

بازگشت به فهرست مطالب

امنیت و حریم خصوصی: متن شما کجا پردازش می‌شود؟

صفحهٔ تست Regex یک صفحهٔ ثابت است و سرور فقط HTML آن را تحویل می‌دهد. اجرای الگو با شیء RegExp خود مرورگر و روی دستگاه شما انجام می‌شود و کد ابزار هیچ درخواستی برای ارسال الگو یا متن نمونه به سرور نمی‌فرستد. پس می‌توانید بخشی از لاگ یا دادهٔ آزمایشی را بدون نگرانی از ذخیره شدن روی سرور ما تست کنید.

با این حال عادت خوب این است که داده‌های واقعاً حساس، مثل رمز عبور، کلید API یا اطلاعات شخصی مشتری، را در هیچ ابزار آنلاینی نچسبانید و به‌جایش نمونهٔ ساختگی با همان قالب بسازید. یک نکتهٔ امنیتی دیگر به خود الگو مربوط است: الگوهایی با کمیت‌نمای تودرتو مثل (a+)+$ روی ورودی خاص دچار «عقب‌گرد فاجعه‌بار» می‌شوند و پردازنده را مشغول نگه می‌دارند. این ابزار تطبیق را جدا از صفحه اجرا می‌کند و اگر بیش از ۲ ثانیه طول بکشد آن را متوقف می‌کند و پیام می‌دهد، ولی همین الگو روی سرور می‌تواند به حملهٔ ReDoS تبدیل شود.

بازگشت به فهرست مطالب

محدودیت‌های ابزار و جایگزین‌ها

ابزار برای تست سریع طراحی شده و چند محدودیت روشن دارد. فقط طعم JavaScript را اجرا می‌کند و تفاوت‌های PCRE یا RE2 را شبیه‌سازی نمی‌کند. جایگزینی (replace) ندارد. فهرست جزئیات به ۲۰۰ مطابقت اول و رنگ‌آمیزی به هزار مطابقت اول محدود است و شمارش بعد از ده هزار مطابقت متوقف می‌شود. اجرای هر الگو حداکثر ۲ ثانیه زمان دارد؛ الگوی پرعقب‌گرد روی متن طولانی متوقف می‌شود و صفحه قفل نمی‌کند.

برای کارهای مکمل، ابزارهای دیگر ایران‌کلاد هم در مرورگر اجرا می‌شوند: فرمت‌کنندهٔ JSON برای مرتب کردن خروجی API، مقایسهٔ متن برای دیدن اثر یک جایگزینی گروهی، و ترجمهٔ Cron وقتی الگوی زمان‌بندی اسکریپت پاک‌سازی لاگ را می‌نویسید. فهرست کامل را در صفحهٔ ابزارها ببینید. اگر Regex را برای پردازش لاگ روی سرور لازم دارید، یک سرور ابری با دسترسی کامل ریشه همهٔ ابزارهای خط فرمان را در اختیارتان می‌گذارد.

بازگشت به فهرست مطالب بازگشت به ابتدای راهنما

پرسش و پاسخ،  ۱۰ پرسش

سؤالات متداول

پاسخ پرسش خود را پیدا نکردید؟ با پشتیبانی در تماس باشید.

آیا متن یا الگویی که وارد می‌کنم به سرور ایران‌کلاد ارسال می‌شود؟
خیر. صفحه فقط یک بار از سرور دریافت می‌شود و تطبیق الگو با موتور RegExp مرورگر روی دستگاه خودتان انجام می‌شود. کد ابزار هیچ درخواستی برای ارسال الگو یا متن نمونه نمی‌فرستد.
این ابزار از کدام طعم Regex استفاده می‌کند؟
طعم JavaScript (استاندارد ECMAScript) که مرورگر شما پیاده‌سازی کرده است. نتیجه با کد فرانت‌اند و Node.js یکسان است، ولی ممکن است با PCRE در PHP، ماژول re در Python یا RE2 در Go در جزئیات فرق داشته باشد.
چرا الگوی \w+ کلمات فارسی را پیدا نمی‌کند؟
چون \w در JavaScript فقط حروف و ارقام لاتین و زیرخط را می‌شناسد. برای حروف فارسی فلگ u را روشن کنید و از \p{L} یا \p{Script=Arabic} یا بازهٔ [\u0600-\u06FF] استفاده کنید.
بدون فلگ g چرا فقط یک مطابقت رنگی می‌شود؟
چون ابزار دقیقاً مثل JavaScript رفتار می‌کند: بدون g متدهایی مثل exec و match فقط اولین مطابقت را برمی‌گردانند. برای دیدن همهٔ مطابقت‌ها فلگ g را روشن کنید؛ در کد خودتان هم برای matchAll یا replaceAll همین فلگ لازم است.
چطور گروه‌های گرفته‌شده (capture groups) را ببینم؟
در فهرست «مطابقت‌ها و گروه‌ها» زیر هر مطابقت، گروه‌های شماره‌دار با $1، $2 و بعدی و گروه‌های نام‌دار مثل (?<year>…) با نام خودشان نمایش داده می‌شوند. الگوی آمادهٔ «تاریخ ISO» یا «خطای ۵xx در لاگ» را بزنید تا نمونه‌اش را ببینید.
الگوی درست برای شمارهٔ موبایل ایران چیست؟
الگوی ⁦(?:\+98|0098|0)9\d{9}⁩ هر سه شکل ۰۹، +۹۸ و ۰۰۹۸ را با ارقام لاتین می‌پذیرد. اگر ورودی ممکن است ارقام فارسی داشته باشد، قبل از اعتبارسنجی ارقام را به لاتین تبدیل کنید یا کلاس ⁦[0-9۰-۹]⁩ را به کار ببرید.
چرا پیام «بیش از ۲ ثانیه طول کشید» گرفتم؟
احتمالاً الگو دچار عقب‌گرد فاجعه‌بار شده است؛ مثلاً کمیت‌نماهای تودرتو مثل (a+)+ روی متن طولانی. ابزار تطبیق را جدا از صفحه اجرا می‌کند و پس از ۲ ثانیه متوقفش می‌کند تا زبانه قفل نشود. چنین الگویی را ساده کنید، از تکرار هم‌پوشان پرهیز کنید و همین الگو را هرگز روی ورودی کاربر در سرور اجرا نکنید.
حداکثر چند مطابقت نمایش داده می‌شود؟
شمارنده مطابقت‌ها را تا سقف ده هزار مورد می‌شمارد، هزار مطابقت اول در متن رنگی می‌شوند و فهرست جزئیات، ۲۰۰ مطابقت اول را با موقعیت شروع و گروه‌های هرکدام نشان می‌دهد.
آیا استفاده از ابزار رایگان است و ثبت‌نام می‌خواهد؟
کاملاً رایگان است و به ثبت‌نام یا ورود نیاز ندارد. همهٔ ابزارهای صفحهٔ ابزارهای ایران‌کلاد همین‌طورند.
الگویی که اینجا تست کردم در PHP هم کار می‌کند؟
برای الگوهای ساده معمولاً بله، ولی در PHP الگو باید بین جداکننده مثل /…/ قرار بگیرد و فلگ‌ها بعد از آن بیایند. lookbehind با طول متغیر و برخی کلاس‌های یونیکد رفتار متفاوتی دارند؛ الگوی نهایی را یک بار با preg_match هم امتحان کنید.

پاسخ پرسش خود را پیدا نکردید؟ با پشتیبانی در تماس باشید.

سرور ابری

سرور ابری ایران‌کلاد در کمتر از ۶۰ ثانیه آماده می‌شود؛ با دیسک NVMe SSD، پورت اختصاصی ۱۰ گیگابیت و صورت‌حساب ساعتی تومانی، از ۱٬۱۰۰ تومان در ساعت.