§

پیٹرن

فلیگز
§

ٹیسٹ سٹرنگ

§

میچز

0 میچز

    ابھی تک کوئی میچ نہیں — اوپر ایک پیٹرن اور ٹیسٹ سٹرنگ ٹائپ کریں۔

    §

    ریپلیس موڈ

    تیز حوالہ

    کریکٹر کلاسز

    \d
    کوئی بھی ہندسہ، [0-9] کے مساوی۔
    \w
    کوئی بھی ورڈ کریکٹر — حروف، اعداد یا انڈر اسکور۔
    \s
    کوئی بھی وائٹ اسپیس — اسپیس، ٹیب، نئی لائن وغیرہ۔

    اینکرز

    \b
    ورڈ باؤنڈری پر صفر چوڑائی کی اسرشن۔
    ^
    ان پٹ کا آغاز (یا m فلیگ سیٹ ہونے پر ہر لائن کا)۔
    $
    ان پٹ کا اختتام (یا m فلیگ سیٹ ہونے پر ہر لائن کا)۔

    کوانٹیفائرز

    *
    پچھلے ٹوکن کے صفر یا زیادہ، گریڈی۔
    +
    پچھلے ٹوکن کا ایک یا زیادہ، گریڈی۔
    ?
    پچھلے ٹوکن کا صفر یا ایک — پچھلے کوانٹیفائر کو لیزی بھی بناتا ہے۔
    {n,m}
    پچھلے ٹوکن کی n اور m کے درمیان تکرار۔

    گروپس

    (...)
    کیپچرنگ گروپ — ریپلیسمنٹ میں $1، $2، … کے طور پر سامنے آتا ہے۔
    (?:...)
    نان کیپچرنگ گروپ — سلاٹ استعمال کیے بغیر گروپ بناتا ہے۔
    (?...)
    نام والا کیپچرنگ گروپ — ریپلیسمنٹ میں $ کے طور پر سامنے آتا ہے۔

    Lookaround

    (?=...)
    پازیٹو lookahead — صرف اس صورت میں میچ کرتا ہے جب اس کے بعد … آئے
    (?!...)
    نیگیٹو lookahead — صرف اس صورت میں میچ کرتا ہے جب اس کے بعد … نہ آئے
    (?<=...)
    پازیٹو lookbehind — صرف اس صورت میں میچ کرتا ہے جب اس سے پہلے … ہو
    (?
    نیگیٹو lookbehind — صرف اس صورت میں میچ کرتا ہے جب اس سے پہلے … نہ ہو

    ایسکیپس

    \\
    ایک حقیقی بیک سلیش کریکٹر۔
    \.
    ایک حقیقی نقطہ — کسی بھی میٹا کریکٹر کو حقیقی طور پر میچ کرنے کے لیے اسے ایسکیپ کریں۔

    Pakistan کے backend اور QA انجینئرز regex کا بھرپور استعمال کرتے ہیں۔ JazzCash اور EasyPaisa کے merchant onboarding میں Pakistani CNIC pattern `^[0-9]{5}-[0-9]{7}-[0-9]$` اور mobile number prefixes Jazz، Telenor، Zong اور Ufone کے لیے validate کرنا، Daraz کے SKU formats کی جانچ، Husky pre-commit hooks میں commit-message lint کرنا، اور Apache یا nginx لاگز سے IP اور user-agent extract کرنا روز کا کام ہے۔ React Hook Form اور Zod پر بنی forms جو 10pearls اور Systems Limited کے ڈویلپرز لکھتے ہیں، NADRA کی e-services کے input validators، اور Pakistani IBAN `PK[0-9]{2}[A-Z0-9]{20}` کی جانچ — سب regex پر منحصر ہیں۔ یہ ٹول patterns کو browser میں test کرتا ہے۔

    آپ کے براؤزر میں regex کیسے کام کرتا ہے؟

    ہر JavaScript رن ٹائم ایک نیٹیو ریگولر ایکسپریشن انجن کے ساتھ آتا ہے — new RegExp(pattern, flags) آپ کا پیٹرن کمپائل کرتا ہے، پھر String.prototype.match، String.prototype.replace اور RegExp.prototype.exec جیسی میتھڈز اسے کسی بھی ان پٹ سٹرنگ پر چلاتی ہیں۔ یہ ٹیسٹر اس انجن کو ایک UI میں لپیٹتا ہے تاکہ آپ براؤزر چھوڑے بغیر پیٹرن میں ترمیم کر سکیں، چلا سکیں، اور انسپیکٹ کر سکیں۔ جو کچھ بھی آپ ٹائپ کرتے ہیں — پیٹرن، فلیگز، ٹیسٹ سٹرنگ یا ریپلیسمنٹ — نیٹ ورک پر نہیں بھیجا جاتا۔

    regex ٹیسٹر کیسے کام کرتا ہے؟

    پائپ لائن چند مختصر مراحل پر مشتمل ہے، جو سب کلائنٹ سائیڈ پر ہر کلید دبانے پر چلتے ہیں (ٹائپنگ کو روان رکھنے کے لیے 150 ms کے debouncing کے ساتھ):

    1. آپ کے پیٹرن کا باڈی اوپر کے فیلڈ سے پڑھا جاتا ہے (نہ آغاز اور نہ اختتام پر / ڈیلیمیٹرز — وہ صرف زینت ہیں)۔ منتخب کردہ فلیگ پلز کو gi یا gimsuy جیسے فلیگ سٹرنگ میں جوڑا جاتا ہے۔
    2. new RegExp(patternBody, flags) پیٹرن کمپائل کرتا ہے۔ اگر انجن SyntaxError پھینکے (مثلاً غیر متوازن قوسین یا غلط ایسکیپ)، پیغام ٹیسٹ سٹرنگ کے اوپر دکھایا جاتا ہے اور میچ کی فہرست خالی کر دی جاتی ہے۔ کمپائل ایرر V8 / SpiderMonkey / JavaScriptCore کا اصل err.message ہے، اس لیے یہ وہی ہے جو آپ DevTools میں دیکھیں گے۔
    3. میچ کی فہرست کے لیے، ٹیسٹر ہمیشہ ایک مصنوعی گلوبل فلیگ کے ساتھ شمار کرتا ہے — لہٰذا اگر آپ g بند بھی کر دیں، فہرست میں ہر میچ شامل رہتا ہے۔ صفر چوڑائی کے میچز کے خلاف معیاری حفاظت (if (m.index === rx.lastIndex) rx.lastIndex++) ان پیٹرنز پر لوپ کو گھومنے سے روکتی ہے جو خالی سٹرنگ سے میچ کرتے ہیں۔ ریپلیس موڈ آپ کے اصل فلیگ سیٹ کا احترام کرتا ہے، لہٰذا $& String.prototype.replace جیسا برتاؤ کرتا ہے۔
    4. ہر اعادے کے درمیان، ٹیسٹر performance.now() - start چیک کرتا ہے اور 50 ms گزرنے پر روک دیتا ہے۔ یہ (a+)+$ جیسے ان پٹس پر طویل a سلسلے کے خلاف کیٹاسٹروفک بیک ٹریکنگ سے بچاتا ہے — ورنہ ٹیب رک جاتا۔ یہ حفاظت بہترین کوشش پر ہے: ایک واحد میچ والا پیتھولوجیکل پیٹرن ایک exec کال کے اندر بھی وقت کھا سکتا ہے۔ اگر ایسا ہو، ٹیب ریفریش کریں اور پیٹرن کو نان گریڈی کوانٹیفائر یا ایٹامک پزیسیو سٹائل (مثلاً [^x]*x) کے ساتھ دوبارہ لکھیں۔
    5. ٹیسٹ سٹرنگ ہر میچ کی رینج پر سیگمنٹس میں تقسیم کی جاتی ہے اور میچ ہونے والے سیگمنٹس <mark class="rx-match rx-cap-N"> عناصر میں لپیٹے جاتے ہیں، جہاں N چھ پیلٹ رنگوں سے چکر کاٹتا ہے تاکہ ملحقہ میچز ایک نظر میں الگ نظر آئیں۔ ہر میچ کے نمبر والے گروپس (m[1]، m[2]، …) اور نام والے گروپس (m.groups) نیچے لیبل والی قطاروں کے طور پر دکھائے جاتے ہیں؛ اگر d فلیگ سیٹ ہو، تو فی گروپ [start, end] انڈیکس بھی دکھائے جاتے ہیں۔

    یہ regex ٹیسٹر کیوں استعمال کریں؟

    • رازداری: ہر پیٹرن، ٹیسٹ سٹرنگ، اور ریپلیسمنٹ آپ کے براؤزر میں بلٹ ان JavaScript RegExp انجن سے چلتا ہے۔ کچھ بھی ٹیب سے باہر نہیں جاتا — اہم جب ان پٹ ایک کسٹمر لاگ، لیک شدہ کریڈنشل پیٹرن، یا کوئی اور چیز ہو جسے آپ کسی ہوسٹڈ SaaS regex پلے گراؤنڈ میں نہیں چسپاں کریں گے۔
    • ایماندار ذائقہ: ٹیسٹر بالکل وہی regex انجن سامنے لاتا ہے جو Node.js، Chrome، Safari، Firefox، اور ہر براؤزر بیسڈ فارم ویلیڈیٹر چلاتا ہے۔ لطیف فرق چھپانے کے لیے کوئی Perl ذائقہ ترجمہ پرت نہیں ہے — جو یہاں کام کرتا ہے وہ آپ کے کوڈ میں کام کرتا ہے۔
    • کیپچر اور نام والے گروپ کی ڈیبگنگ: ہر نمبر والا گروپ ($1، $2، …) اور نام والا گروپ ($<year>) فی میچ دکھایا جاتا ہے، تو آپ پارسر بنا سکتے ہیں اور سلاٹس کو اندازے کے بغیر پڑھ سکتے ہیں۔ ریپلیس موڈ آپ کو گروپس کو آزادانہ ملانے دیتا ہے — $2-$1 پہلے دو سلاٹس کو سویپ کرتا ہے، $<name> ایک نام والا سلاٹ ڈالتا ہے، اور $& پورا میچ دہراتا ہے۔
    • کیٹاسٹروفک-بیک ٹریکنگ گارڈ: شمار پر 50 ms کی حد (a+)+$ جیسے پیتھولوجیکل پیٹرنز کو ٹیب کو منجمد کرنے سے پہلے روک دیتی ہے۔ آپ کو معطل براؤزر کے بجائے ایک وضاحتی ایرر نظر آتا ہے، اور صفحہ فوراً بحال ہو جاتا ہے۔

    regex ٹیسٹر کے عام استعمالات کیا ہیں؟

    ریگولر ایکسپریشنز ویب ڈیولپمنٹ، سیکیورٹی اور ڈیٹا کے کام میں سامنے آتے ہیں — یہ ٹیسٹر سب سے عام استعمال کے کیسز کو نشانہ بناتا ہے:

    • فارم ویلیڈیشن: ای میل، فون یا پوسٹل کوڈ پیٹرن کا پروٹوٹائپ بنائیں، نمونہ ان پٹس کو ٹیسٹ سٹرنگ میں چسپاں کریں، اور پروڈکشن کوڈ میں پیٹرن بھیجنے سے پہلے تصدیق کریں کہ ہر مثبت کیس میچ کرتا ہے اور ہر منفی کیس نہیں۔
    • لاگ سکریپنگ: NGINX، ایپلیکیشن، یا آڈٹ لاگ آؤٹ پٹ کا ایک حصہ چسپاں کریں، اپنی دلچسپی کے حصوں کے لیے نام والے گروپس کے ساتھ پیٹرن لکھیں ((?<ip>…) (?<path>…)) اور اپنے پارسر کی درستگی کی تصدیق کے لیے فی میچ کیپچر شدہ سلاٹس پڑھیں۔
    • ری فیکٹر کے لیے سرچ اور ریپلیس: ایک سنپٹ میں شناخت کنندہ دوبارہ لکھنے کے لیے ریپلیس موڈ استعمال کریں — (\w+)\.set(\w+)\($1.$2 = سیٹر کالز کو پراپرٹی اسائنمنٹس میں بدل دیتا ہے، اور لائیو پری ویو codemod میں کمیٹ کرنے سے پہلے نتیجہ دکھاتا ہے۔

    regex کی مثال کیسی نظر آتی ہے؟

    پیٹرن (\d{4})-(\d{2})-(\d{2}) کو g فلیگ کے ساتھ ٹیسٹ سٹرنگ release 2025-11-15, prerelease 2026-05-25 پر چلائیں۔ انجن دو میچ تلاش کرتا ہے۔ پہلا میچ 2025-11-15 ہے جس میں گروپ 1 = 2025، گروپ 2 = 11، گروپ 3 = 15۔ دوسرا میچ 2026-05-25 ہے، اسی گروپ شکل کے ساتھ۔ ریپلیس موڈ میں، ریپلیسمنٹ ٹیمپلیٹ $3/$2/$1 دونوں تاریخوں کو 15/11/2025 اور 25/05/2026 میں دوبارہ لکھتا ہے — ایک پیٹرن میں ISO سے DMY کی تبدیلی جس کی آپ کسی سکرپٹ میں پلگ کرنے سے پہلے بصری طور پر تصدیق کر سکتے ہیں۔

    کسی بھی regex کام — پیٹرن بنانے، ڈیبگ کرنے یا دوبارہ لکھنے — کے لیے اس ٹیسٹر کو تیز راستے کے طور پر استعمال کریں۔ سب کچھ مقامی طور پر چلتا ہے؛ کچھ بھی لاگ نہیں ہوتا؛ regex انجن وہی ہے جو آپ کا براؤزر بھیجتا ہے، تو طرز عمل وہی ہوتا ہے جو پروڈکشن کوڈ رن ٹائم پر دیکھے گا۔