آپ کے براؤزر میں regex کیسے کام کرتا ہے؟
ہر JavaScript رن ٹائم ایک نیٹیو ریگولر ایکسپریشن انجن کے ساتھ آتا ہے — new RegExp(pattern, flags) آپ کا پیٹرن کمپائل کرتا ہے، پھر String.prototype.match، String.prototype.replace اور RegExp.prototype.exec جیسی میتھڈز اسے کسی بھی ان پٹ سٹرنگ پر چلاتی ہیں۔ یہ ٹیسٹر اس انجن کو ایک UI میں لپیٹتا ہے تاکہ آپ براؤزر چھوڑے بغیر پیٹرن میں ترمیم کر سکیں، چلا سکیں، اور انسپیکٹ کر سکیں۔ جو کچھ بھی آپ ٹائپ کرتے ہیں — پیٹرن، فلیگز، ٹیسٹ سٹرنگ یا ریپلیسمنٹ — نیٹ ورک پر نہیں بھیجا جاتا۔
regex ٹیسٹر کیسے کام کرتا ہے؟
پائپ لائن چند مختصر مراحل پر مشتمل ہے، جو سب کلائنٹ سائیڈ پر ہر کلید دبانے پر چلتے ہیں (ٹائپنگ کو روان رکھنے کے لیے 150 ms کے debouncing کے ساتھ):
- آپ کے پیٹرن کا باڈی اوپر کے فیلڈ سے پڑھا جاتا ہے (نہ آغاز اور نہ اختتام پر
/ڈیلیمیٹرز — وہ صرف زینت ہیں)۔ منتخب کردہ فلیگ پلز کوgiیاgimsuyجیسے فلیگ سٹرنگ میں جوڑا جاتا ہے۔ new RegExp(patternBody, flags)پیٹرن کمپائل کرتا ہے۔ اگر انجنSyntaxErrorپھینکے (مثلاً غیر متوازن قوسین یا غلط ایسکیپ)، پیغام ٹیسٹ سٹرنگ کے اوپر دکھایا جاتا ہے اور میچ کی فہرست خالی کر دی جاتی ہے۔ کمپائل ایرر V8 / SpiderMonkey / JavaScriptCore کا اصلerr.messageہے، اس لیے یہ وہی ہے جو آپ DevTools میں دیکھیں گے۔- میچ کی فہرست کے لیے، ٹیسٹر ہمیشہ ایک مصنوعی گلوبل فلیگ کے ساتھ شمار کرتا ہے — لہٰذا اگر آپ
gبند بھی کر دیں، فہرست میں ہر میچ شامل رہتا ہے۔ صفر چوڑائی کے میچز کے خلاف معیاری حفاظت (if (m.index === rx.lastIndex) rx.lastIndex++) ان پیٹرنز پر لوپ کو گھومنے سے روکتی ہے جو خالی سٹرنگ سے میچ کرتے ہیں۔ ریپلیس موڈ آپ کے اصل فلیگ سیٹ کا احترام کرتا ہے، لہٰذا$&String.prototype.replaceجیسا برتاؤ کرتا ہے۔ - ہر اعادے کے درمیان، ٹیسٹر
performance.now() - startچیک کرتا ہے اور 50 ms گزرنے پر روک دیتا ہے۔ یہ(a+)+$جیسے ان پٹس پر طویلaسلسلے کے خلاف کیٹاسٹروفک بیک ٹریکنگ سے بچاتا ہے — ورنہ ٹیب رک جاتا۔ یہ حفاظت بہترین کوشش پر ہے: ایک واحد میچ والا پیتھولوجیکل پیٹرن ایکexecکال کے اندر بھی وقت کھا سکتا ہے۔ اگر ایسا ہو، ٹیب ریفریش کریں اور پیٹرن کو نان گریڈی کوانٹیفائر یا ایٹامک پزیسیو سٹائل (مثلاً[^x]*x) کے ساتھ دوبارہ لکھیں۔ - ٹیسٹ سٹرنگ ہر میچ کی رینج پر سیگمنٹس میں تقسیم کی جاتی ہے اور میچ ہونے والے سیگمنٹس
<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 انجن وہی ہے جو آپ کا براؤزر بھیجتا ہے، تو طرز عمل وہی ہوتا ہے جو پروڈکشن کوڈ رن ٹائم پر دیکھے گا۔