Regex ٹیسٹر
JavaScript ریگولر ایکسپریشنز کو لائیو ٹیسٹ کریں۔ ہائی لائٹ شدہ میچز دیکھیں اور کیپچر گروپس درج دیکھیں۔
ہائی لائٹ شدہ میچز
میچز اور گروپس
- اوپر والے فیلڈ میں اپنا regex پیٹرن ٹائپ کریں (اسے سلیشز میں لپیٹنے کی ضرورت نہیں)۔
- اپنے مطلوبہ فلیگز کو ٹوگل کریں: تمام میچز کے لیے g، case-insensitive کے لیے i وغیرہ۔
- ٹیسٹ سٹرنگ باکس میں ٹیسٹ سٹرنگ پیسٹ یا ٹائپ کریں۔
- ریئل ٹائم میں میچز کو ہائی لائٹ ہوتے دیکھیں؛ نیچے کے ٹیبل میں کیپچر شدہ گروپس کا معائنہ کریں۔
یہ کیا کرتا ہے؟
یہ ٹیسٹر آپ کے پیٹرن کو براؤزر کے نیٹو RegExp انجن کا استعمال کرتے ہوئے ٹیسٹ سٹرنگ کے خلاف چلاتا ہے — وہی جو Node.js، Deno، اور ہر براؤزر استعمال کرتا ہے۔ میچز inline ہائی لائٹ ہوتے ہیں۔ نمبر والے اور نام والے کیپچر گروپس کو ایک ٹیبل میں نکالا جاتا ہے تاکہ آپ بالکل دیکھ سکیں کہ ہر پیرنتھیٹیکل سیگمنٹ نے کیا پکڑا۔
مثال
پیٹرن (flag g کے ساتھ):
\b(\w+)@(\w+\.\w+)\b ٹیسٹ سٹرنگ:
Contact us at [email protected] or [email protected]. Not an email: foo@bar (no TLD). میچز:
1 [email protected] $1: hello $2: example.com
2 [email protected] $1: support $2: happycoder.dev foo@bar میچ نہیں ہوتا کیونکہ \w+\.\w+ کو ڈومین میں ایک نقطہ درکار ہے۔
میرا regex کیوں میچ نہیں ہو رہا؟
- g فلیگ بھول گئے۔ اس کے بغیر، صرف پہلا میچ واپس آتا ہے۔ /cat/.exec("cat cat") ایک "cat" پاتا ہے؛ /cat/g دونوں پاتا ہے۔
- Unescaped metacharacters۔ example.com examplexcom سے بھی میچ ہوتا ہے کیونکہ . کسی بھی کیریکٹر سے میچ ہوتا ہے۔ اسے escape کریں: example\.com۔
- گریڈی میچنگ زیادہ کھاتی ہے۔ <a><b> پر <.*> پوری چیز کو پکڑتا ہے۔ پہلے > پر رکنے کے لیے lazy <.*?> یا <[^>]*> استعمال کریں۔
- ورڈ باؤنڈری کنفیوژن۔ \b ایک ورڈ چار اور ایک نان-ورڈ چار کے درمیان پوزیشن ہے۔ \bfoo-bar\b جیسے پیٹرن ناکام ہوتے ہیں کیونکہ - بیچ میں پہلے ہی ایک نان-ورڈ باؤنڈری ہے۔
- کیس میچ نہیں ہو رہا۔ [a-z]+ Hello سے میچ نہیں ہوگا۔ i فلیگ شامل کریں یا [A-Za-z]+ شامل کریں۔
- ملٹی لائن ^ / $۔ m فلیگ کے بغیر وہ صرف پوری سٹرنگ پر اینکر کرتے ہیں، ہر لائن پر نہیں۔ اگر آپ لاگ لائنز سکین کر رہے ہیں تو m آن کریں۔
اکثر پوچھے جانے والے سوالات
یہ ٹیسٹر کون سا regex فلیور استعمال کرتا ہے؟
JavaScript (ECMAScript) regex، براؤزر کے بلٹ ان RegExp انجن کے ذریعے۔ یہ PCRE (PHP, Perl)، Python کے re ماڈیول، اور POSIX regex سے کئی طرح سے مختلف ہے: کوئی recursion نہیں، کوئی possessive quantifiers نہیں، نام والے گروپس (?P<name>...) کے بجائے (?<name>...) استعمال کرتے ہیں، اور \d جیسے character-class shorthand صرف ASCII ہیں جب تک آپ u فلیگ شامل نہ کریں۔
کیا یہ lookbehind کو سپورٹ کرتا ہے؟
ہاں۔ (?<=foo)bar اور (?<!foo)bar جیسی lookbehind assertions ES2018 میں شامل کی گئیں اور تمام موجودہ Chromium، Firefox، اور Safari بلڈز میں سپورٹ کی جاتی ہیں۔ اگر آپ پروڈکشن میں بہت پرانے براؤزرز کو نشانہ بنا رہے ہیں، تو ان پر انحصار کرنے سے پہلے caniuse چیک کریں — لیکن یہ ٹیسٹر خود انہیں اچھی طرح چلاتا ہے۔
فلیگز g، i، m، s، اور u کا کیا مطلب ہے؟
g صرف پہلے کے بجائے ہر میچ ڈھونڈتا ہے۔ i میچنگ کو case-insensitive بناتا ہے۔ m ^ اور $ کو پوری سٹرنگ کے بجائے ہر لائن کے آغاز اور اختتام سے میچ کراتا ہے۔ s (dotall) . کو newlines سے میچ کراتا ہے۔ u مکمل Unicode ہینڈلنگ اور سخت escape parsing کو فعال کرتا ہے۔ صرف وہی فلیگز منتخب کریں جن کی آپ کو ضرورت ہے — خاص طور پر g تبدیل کرتا ہے کہ آپ کو کتنے میچز ملیں گے۔
میرا گریڈی quantifier بہت زیادہ میچ کیوں کر رہا ہے؟
*، +، اور {n,} جیسے quantifiers ڈیفالٹ طور پر گریڈی ہیں — وہ جتنا ممکن ہو میچ کرتے ہیں اور صرف اس وقت واپس دیتے ہیں جب پیٹرن کا باقی حصہ ناکام ہو۔ انہیں lazy بنانے کے لیے ? شامل کریں: .*? جتنا ممکن ہو کم میچ کرتا ہے۔ متعدد ٹیگز پر کھانے والے <a>.*</a> کا عام حل: <a>.*?</a> یا نفی شدہ کلاس <a>[^<]*</a> استعمال کریں۔
میں پیٹرن یا replacement میں بعد میں کیپچر شدہ گروپ کا حوالہ کیسے دوں؟
پیٹرن کے اندر، اسی ٹیکسٹ سے میچ کرنے کے لیے \1، \2 وغیرہ استعمال کریں جو پچھلے گروپ نے پکڑا — (\w+)\s+\1 دہرائے جانے والے الفاظ سے میچ کرتا ہے۔ replacement سٹرنگ میں (اس لائیو ٹیسٹر میں سپورٹ نہیں، لیکن String.replace میں) $1، $2 استعمال کریں۔ نام والے گروپس پیٹرن کے اندر \k<name> اور replacements میں $<name> استعمال کرتے ہیں۔
جب پیٹرن میں ایک نقطہ، سلیش یا پیرنتھیسس ہو تو میرا regex کیوں ٹوٹ جاتا ہے؟
یہ regex metacharacters ہیں۔ ان سے لفظی طور پر میچ کرنے کے لیے، بیک سلیش کے ساتھ escape کریں: نقطے کے لیے \.، سلیش کے لیے \/ (new RegExp سٹرنگ میں اختیاری، /.../ literals کے درمیان ضروری)، پیرنتھیسس کے لیے \( اور \)۔ خاص کیریکٹرز ہیں . * + ? ^ $ { } ( ) | [ ] \ — بطور لفظی متن ان میں سے کسی کو بھی escaping کی ضرورت ہے۔
کیا آپ وہ regex یا ٹیسٹ ٹیکسٹ محفوظ کرتے ہیں جو میں یہاں ٹائپ کرتا ہوں؟
نہیں۔ آپ جو پیٹرنز لکھتے ہیں یا جو ٹیکسٹ ان کے خلاف ٹیسٹ کرتے ہیں ہم انہیں محفوظ نہیں کرتے۔ آپ جو بھی ٹائپ کرتے ہیں وہ ٹیب بند یا ریفریش کرتے ہی ختم ہو جاتا ہے — کوئی لاگز نہیں، ہمارے پاس آپ نے کیا میچ کیا اس کا کوئی ریکارڈ نہیں۔ اگر آپ اضافی اطمینان چاہتے ہیں، تو آپ کے براؤزر کے ڈیولپر ٹولز تصدیق کر دیں گے۔