হোম › ব্লগ › রেজেক্স ম্যাচিং গাইড
ডেভেলপার ও কোড

রেজেক্স ম্যাচ না হওয়ার কারণ: ফ্ল্যাগস (g, m, s), মাল্টি-লাইন ও ব্যাকস্ল্যাশ এস্কেপ

প্রকাশের তারিখ: ৯ অক্টোবর, ২০২৬ • হালনাগাদ: ১৭ অক্টোবর, ২০২৬ • লেখক: GoToolstack ইঞ্জিনিয়ারিং টিম • যাচাইকৃত: ECMAScript Regex ইঞ্জিন
রেজেক্স প্যাটার্ন লাইভ পরীক্ষা করুন: ফ্ল্যাগ, ক্যাপচারিং গ্রুপ এবং ম্যাচিং রেজাল্ট সরাসরি ব্রাউজারে যাচাই করুন।
রেজেক্স পরীক্ষক খুলুন
সূচিপত্র
  1. ১. রেজেক্স কেন কাজ করে না?
  2. ২. অপরিহার্য ৩টি ফ্ল্যাগ: global, multiline ও dotAll
  3. ৩. ব্যাকস্ল্যাশ এস্কেপ ও গ্রিডি ম্যাচিং ত্রুটি

১. রেজেক্স কেন কাজ করে না?

রেগুলার এক্সপ্রেশন (Regex) হলো টেক্সট প্যাটার্ন মেলানোর অত্যন্ত শক্তিশালী মাধ্যম। কিন্তু সামান্য একটি ফ্ল্যাগ অনুপস্থিত থাকলে বা ভুল এস্কেপিংয়ের কারণে প্রত্যাশিত প্যাটার্নটি সম্পূর্ণ অমিল থেকে যায়। এর মধ্যে সবচেয়ে সাধারণ কারণগুলো হলো ফ্ল্যাগ নির্বাচন, গ্রিডি কোয়ান্টিফায়ার এবং ব্যাকস্ল্যাশ ডাবল-এস্কেপিংয়ের বিভ্রান্তি।

২. অপরিহার্য ৩টি ফ্ল্যাগ: global, multiline ও dotAll

ফ্ল্যাগ নাম আচরণ ও প্রভাব
g Global প্রথম ম্যাচে না থেমে পুরো টেক্সটের সব কয়টি ম্যাচ খুঁজে বের করে।
m Multiline ^ এবং $ অ্যাঙ্করগুলোকে পুরো ডকুমেন্টের শুরুর/শেষের বদলে প্রতিটি লাইনের শুরুতে ও শেষে কার্যকর করে।
s dotAll সাধারণত ডট (.) নিউ-লাইন ছাড়া সব ক্যারেক্টার ধরে; এই ফ্ল্যাগ দিলে ডট নিউ-লাইন (\n)-কেও ম্যাচ করে।
রেজেক্স ফ্ল্যাগস ও ম্যাচিং সমস্যা সমাধান ডায়াগ্রাম
চিত্র ১: গ্লোবাল, মাল্টি-লাইন ও ডটঅল ফ্ল্যাগের উপস্থিতিতে রেজেক্স ম্যাচিং সীমানার কারিগরি তুলনা।

৩. ব্যাকস্ল্যাশ এস্কেপ ও গ্রিডি ম্যাচিং ত্রুটি

স্ট্রিং লিটারেল বনাম রেজেক্স লিটারেল

জাভাস্ক্রিপ্ট কোডে new RegExp("\\d+") লিখলে দুটি ব্যাকস্ল্যাশ দিতে হয়, কারণ স্ট্রিং নিজেই প্রথম ব্যাকস্ল্যাশটি কনজিউম করে। কিন্তু /\d+/ লিখলে একটি ব্যাকস্ল্যাশই যথেষ্ট।

গ্রিডি বনাম লেজি কোয়ান্টিফায়ার

HTML ট্যাগের ভেতর থেকে টেক্সট খুঁজতে গিয়ে <.*> লিখলে তা প্রথম ট্যাগ থেকে শেষ ট্যাগ পর্যন্ত সবকিছু একবারে গিলে ফেলে। লেজি ম্যাচ করতে <.*?> ব্যবহার করতে হয়।