ریجیکس میچ نہ ہونے کی وجوہات: فلیگز، ملٹی لائن اینکرز اور اسکیپنگ گائیڈ
فہرستِ مضامین
1. ریجیکس کی مایوس کن پیچیدگیاں
ریگولر ایکسپریشنز (RegEx) کوڈ میں پیٹرن تلاش کرنے اور ڈیٹا ویلیڈیٹ کرنے کا انتہائی طاقتور ذریعہ ہیں۔ لیکن اکثر اوقات ایک بظاہر درست پیٹرن ٹیکسٹ میں موجود الفاظ سے میچ نہیں کرتا۔ اس کی وجہ عام طور پر پیٹرن کی غلطی نہیں بلکہ فلیگز کا غلط انتخاب، اسٹیٹ فل پوائنٹرز، یا ملٹی لائن رویہ ہوتا ہے۔
2. چار عام ریجیکس تکنیکی پھندے
الف. گلوبل فلیگ (g) اور Stateful lastIndex کا جال
جاوا اسکرپٹ میں جب آپ ریجیکس پر g فلیگ لگاتے ہیں تو ریجیکس آبجیکٹ اسٹیٹ فل (Stateful) بن جاتا ہے۔ ہر بار regex.test() چلانے پر وہ پچھلے میچ کی پوزیشن کے بعد سے تلاش شروع کرتا ہے:
const re = /apple/g;
console.log(re.test("apple")); // true (lastIndex اب 5 ہے)
console.log(re.test("apple")); // false (کیونکہ انڈیکس 5 کے بعد کچھ نہیں!)
console.log(re.test("apple")); // true (دوبارہ صفر سے شروع ہوا)حل: یا تو ہر بار regex.lastIndex = 0 سیٹ کریں، یا سمپل ٹیسٹنگ کے لیے g فلیگ ہٹا دیں۔
ب. ملٹی لائن اینکرز (^ اور $) کا رویہ اور m فلیگ
ڈیفالٹ طور پر کیریٹ (^) پوری اسٹرنگ کے آغاز اور ڈالر ($) پوری اسٹرنگ کے اختتام کو میچ کرتا ہے۔ اگر آپ کے پاس متعدد سطروں پر مشتمل پیراگراف ہو اور آپ ہر سطر کا پہلا لفظ پکڑنا چاہتے ہوں تو m (Multiline) فلیگ لگانا لازمی ہے تاکہ اینکرز ہر سطر کے آغاز اور اختتام پر کام کریں۔
ج. نئی سطر اور نقطہ (Dot) کا رویہ: s فلیگ
ریجیکس میں نقطہ (.) تقریباً تمام حروف کو میچ کرتا ہے سوائے نئی سطر (\n یا \r) کے۔ اگر آپ دو ٹیگز کے درمیان متعدد سطروں کا مواد پکڑنا چاہتے ہیں تو s (dotAll) فلیگ فعال کریں تاکہ نقطہ نئی سطر کو بھی میچ کر سکے۔
د. بیک سلیش اسکیپنگ کا دوہرا اثر (Escaping Nuances)
مخصوص علامات (جیسے . * + ? ^ $ { } [ ] ( ) | \) کو بطور عام حرف تلاش کرنے کے لیے ان کے آگے بیک سلیش لگانا لازمی ہے (جیسے \.)۔ پروگرامنگ کوڈ میں اسٹرنگ بناتے وقت اکثر ڈبل بیک سلیش ("\\.") درکار ہوتا ہے۔
3. فلیگز کا کوئیک ریفرنس چارٹ
| فلیگ | نام | کردار اور اثر |
|---|---|---|
g |
Global | پہلے میچ پر رکنے کے بجائے پوری اسٹرنگ میں تمام میچز تلاش کرنا۔ |
i |
Ignore Case | بڑے اور چھوٹے لاطینی حروف (A بمقابلہ a) کی تفریق ختم کرنا۔ |
m |
Multiline | ^ اور $ کو ہر سطر کے آغاز اور اختتام پر نافذ کرنا۔ |
s |
dotAll | نقطہ (.) کو نئی سطر (Newline) بھی میچ کرنے کی اجازت دینا۔ |
u |
Unicode | یونیکوڈ 4-بائٹ ایموجیز اور غیر لاطینی سرپلس پوائنٹس کی درست گنتی۔ |
معیارات اور دستاویزات
- ECMA-262 (ECMAScript Standard): جاوا اسکرپٹ ریگولر ایکسپریشن آبجیکٹس اور پیٹرن سنٹیکس۔