JavaScript کے لیے Regex ٹیسٹر

ریگولر ایکسپریشن ٹائپ کریں اور ٹائپ کرتے ہی ہر میچ نمایاں دیکھیں، کیپچر گروپس، ریپلیسمنٹ پریویو اور تیار پیٹرنز کی لائبریری کے ساتھ۔

آپ کے براؤزر میں چلتا ہےسائن اپ کی ضرورت نہیںکچھ اپ لوڈ نہیں ہوتا

نمایاں کیے گئے میچز

    
$1، $<name>، $& (پورا میچ) استعمال کریں
میچ کی تفصیلات
#انڈیکسمیچگروپس
Regex چیٹ شیٹ
.نئی لائن کے سوا کوئی بھی کریکٹر (s کے ساتھ کوئی بھی)
\d \w \sہندسہ، لفظی کریکٹر، خالی جگہ
\D \W \Sہندسہ نہیں، لفظی نہیں، خالی جگہ نہیں
[abc] [^abc]a، b، c میں سے کوئی / کوئی نہیں
[a-z0-9]کریکٹر رینج
\p{L} \p{N}یونیکوڈ حرف / عدد (u درکار)
^ $ان پٹ کا آغاز / اختتام (m کے ساتھ لائن کا)
\b \Bلفظ کی حد / حد نہیں
* + ?0 یا زیادہ، 1 یا زیادہ، 0 یا 1
{n} {n,} {n,m}بالکل n، کم از کم n، n اور m کے درمیان
*? +? ??سست (کم سے کم ممکن)
a|ba یا b
(…)کیپچر گروپ، حوالہ $1
(?<name>…)نامزد گروپ، $<name>
(?:…)نان کیپچرنگ گروپ
\1 \k<name>بیک ریفرنس
(?=…) (?!…)Lookahead / منفی lookahead
(?<=…) (?<!…)Lookbehind / منفی lookbehind
\. \* \\ایسکیپ شدہ لفظی کریکٹرز
\n \t \rنئی لائن، ٹیب، کیریج ریٹرن
\uFFFFیونیکوڈ کوڈ یونٹ
\u{1F600}کوڈ پوائنٹ (u درکار)
$&ریپلیسمنٹ میں پورا میچ
$` $'میچ سے پہلے / بعد کا متن

Regex ٹیسٹر استعمال کرنے کا طریقہ

  1. اپنا پیٹرن سلیشز کے درمیان درج کریں، اردگرد کے / کے بغیر۔
  2. g (تمام میچز)، i (کیس نظر انداز) اور m (ملٹی لائن) جیسے فلیگز آن/آف کریں۔
  3. اپنا ٹیسٹ متن پیسٹ کریں۔ میچز ساتھ والے خانے میں نمایاں ہوتے ہیں اور نیچے ان کے انڈیکس اور کیپچر گروپس کے ساتھ درج ہوتے ہیں۔
  4. ریپلیس پر نشان لگائیں اور String.replace کا پریویو دیکھنے کے لیے $1 یا $<name> جیسا ریپلیسمنٹ درج کریں۔
  5. ای میل، URL، IP یا تاریخ کے آزمودہ regex سے شروع کرنے کے لیے پیٹرن لائبریری سے کوئی پیٹرن منتخب کریں۔

JavaScript ریگولر ایکسپریشنز

یہ ٹیسٹر آپ کے براؤزر کا اپنا RegExp انجن استعمال کرتا ہے، اس لیے نتائج بالکل وہی ہیں جو JavaScript اور Node.js میں String.match، matchAll، replace اور RegExp.exec لوٹاتے ہیں۔ اس میں جدید سنٹیکس بھی شامل ہے: نامزد گروپس (?<name>…)، lookbehind (?<=…)، u فلیگ کے ساتھ \p{L} جیسے یونیکوڈ پراپرٹی ایسکیپس، اور d فلیگ کے ساتھ میچ انڈیکس۔

فلیگز کیا کرتے ہیں

فلیگناماثر
gglobalپہلے میچ پر رکنے کے بجائے ہر میچ تلاش کرتا ہے۔
iignoreCaseحروف بڑے چھوٹے سے قطع نظر میچ ہوتے ہیں۔
mmultiline^ اور $ ہر لائن کے آغاز اور اختتام پر میچ ہوتے ہیں۔
sdotAll. لائن بریکس سے بھی میچ ہوتا ہے۔
uunicodeپیٹرن کو کوڈ پوائنٹس کے طور پر لیتا ہے؛ \p{…} اور \u{…} فعال کرتا ہے۔
ystickyصرف موجودہ lastIndex پوزیشن پر میچ کرتا ہے۔
dhasIndicesہر کیپچر گروپ کی آغاز اور اختتام پوزیشنز بتاتا ہے۔

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 میں مقامی طور پر چلتی ہے۔ آپ کا پیٹرن اور متن صرف آپ کے اپنے براؤزر میں محفوظ ہوتا ہے تاکہ واپس آنے پر بھی موجود رہے۔

متعلقہ ٹولز