Regex ٹیسٹر استعمال کرنے کا طریقہ
- اپنا پیٹرن سلیشز کے درمیان درج کریں، اردگرد کے
/ کے بغیر۔ g (تمام میچز)، i (کیس نظر انداز) اور m (ملٹی لائن) جیسے فلیگز آن/آف کریں۔- اپنا ٹیسٹ متن پیسٹ کریں۔ میچز ساتھ والے خانے میں نمایاں ہوتے ہیں اور نیچے ان کے انڈیکس اور کیپچر گروپس کے ساتھ درج ہوتے ہیں۔
- ریپلیس پر نشان لگائیں اور
String.replace کا پریویو دیکھنے کے لیے $1 یا $<name> جیسا ریپلیسمنٹ درج کریں۔ - ای میل، URL، IP یا تاریخ کے آزمودہ regex سے شروع کرنے کے لیے پیٹرن لائبریری سے کوئی پیٹرن منتخب کریں۔
JavaScript ریگولر ایکسپریشنز
یہ ٹیسٹر آپ کے براؤزر کا اپنا RegExp انجن استعمال کرتا ہے، اس لیے نتائج بالکل وہی ہیں جو JavaScript اور Node.js میں String.match، matchAll، replace اور RegExp.exec لوٹاتے ہیں۔ اس میں جدید سنٹیکس بھی شامل ہے: نامزد گروپس (?<name>…)، lookbehind (?<=…)، u فلیگ کے ساتھ \p{L} جیسے یونیکوڈ پراپرٹی ایسکیپس، اور d فلیگ کے ساتھ میچ انڈیکس۔
فلیگز کیا کرتے ہیں
| فلیگ | نام | اثر |
g | global | پہلے میچ پر رکنے کے بجائے ہر میچ تلاش کرتا ہے۔ |
i | ignoreCase | حروف بڑے چھوٹے سے قطع نظر میچ ہوتے ہیں۔ |
m | multiline | ^ اور $ ہر لائن کے آغاز اور اختتام پر میچ ہوتے ہیں۔ |
s | dotAll | . لائن بریکس سے بھی میچ ہوتا ہے۔ |
u | unicode | پیٹرن کو کوڈ پوائنٹس کے طور پر لیتا ہے؛ \p{…} اور \u{…} فعال کرتا ہے۔ |
y | sticky | صرف موجودہ lastIndex پوزیشن پر میچ کرتا ہے۔ |
d | hasIndices | ہر کیپچر گروپ کی آغاز اور اختتام پوزیشنز بتاتا ہے۔ |
Catastrophic backtracking سے تحفظ
نیسٹڈ کوانٹیفائرز والے پیٹرنز، جیسے (a+)+$ یا (\w|\d)*x، تقریباً میچ ہونے والے ان پٹس پر exponential وقت لے سکتے ہیں۔ عام ویب صفحے میں اس سے ٹیب منجمد ہو جاتا ہے۔ یہاں ہر میچ ایک بیک گراؤنڈ Web Worker میں چلتا ہے جسے ایک سیکنڈ بعد روک دیا جاتا ہے، اور اٹکے ہوئے براؤزر کے بجائے آپ کو واضح وارننگ ملتی ہے۔ یہی پیٹرن پروڈکشن کوڈ میں ReDoS کمزوری ہو سکتا ہے، اس لیے وارننگ کو ٹھیک کرنے والا بگ سمجھیں۔
بہتر regex لکھنے کے مشورے
- پوری ویلیوز ویلیڈیٹ کرتے وقت پیٹرنز کو
^ اور $ سے اینکر کریں، ورنہ سٹرنگ میں کہیں بھی میچ ہو جانا کافی ہوگا۔
.* کے بجائے [^"]* جیسی مخصوص کلاسز کو ترجیح دیں؛ یہ تیز ہیں اور ضرورت سے زیادہ میچ سے بچاتی ہیں۔
- جب کیپچر شدہ ویلیو کی ضرورت نہ ہو تو نان کیپچرنگ گروپس
(?:…) استعمال کریں۔
- اپنے گروپس کو نام دیں۔
match.groups.year پڑھنا match[1] سے آسان ہے۔
اکثر پوچھے جانے والے سوالات
یہ ٹیسٹر regex کا کون سا فلیور استعمال کرتا ہے؟
JavaScript (ECMAScript)، آپ کے براؤزر کے اندرونی RegExp کے ذریعے۔ زیادہ تر سنٹیکس PCRE، Python اور Java سے مشترک ہے، لیکن possessive کوانٹیفائرز، atomic گروپس اور (?i) جیسے اِن لائن modifiers JavaScript میں دستیاب نہیں۔
میرا پیٹرن صرف ایک میچ کیوں تلاش کرتا ہے؟
g (global) فلیگ کے بغیر JavaScript پہلے میچ کے بعد رک جاتا ہے۔ ہر موقع تلاش کرنے کے لیے g آن کریں۔
ریپلیسمنٹ میں گروپس کا حوالہ کیسے دوں؟
نمبر والے گروپس کے لیے $1، $2…، نامزد گروپس کے لیے $<name>، پورے میچ کے لیے $& اور لفظی ڈالر کے نشان کے لیے $$ استعمال کریں۔
ٹیسٹر ٹائم آؤٹ کے ساتھ کیوں رک گیا؟
پیٹرن نے آپ کے ان پٹ پر ایک سیکنڈ سے زیادہ لیا، جس کا مطلب تقریباً ہمیشہ catastrophic backtracking ہوتا ہے۔ (x+)+ جیسے نیسٹڈ کوانٹیفائرز یا (a|a)* جیسے اوور لیپنگ متبادل تلاش کریں اور انہیں اس طرح دوبارہ لکھیں کہ ہر کریکٹر صرف ایک طریقے سے میچ ہو۔
کیا میرا ٹیسٹ ڈیٹا کہیں بھیجا جاتا ہے؟
نہیں۔ میچنگ آپ کے براؤزر کے اندر ایک Web Worker میں مقامی طور پر چلتی ہے۔ آپ کا پیٹرن اور متن صرف آپ کے اپنے براؤزر میں محفوظ ہوتا ہے تاکہ واپس آنے پر بھی موجود رہے۔