`RegExp` অবজেক্ট

এই প্রবন্ধে RegExp অবজেক্ট ব্যাখ্যা করা হয়েছে।

আমরা বাস্তব উদাহরণের মাধ্যমে RegExp অবজেক্ট ব্যাখ্যা করব।

YouTube Video

RegExp অবজেক্ট

RegExp কী?

RegExp (রেগুলার এক্সপ্রেশন) হল স্ট্রিং প্যাটার্ন উপস্থাপন করার জন্য ব্যবহৃত একটি অবজেক্ট। সরল অক্ষর তুলনার তুলনায়, আপনি 'নির্দিষ্ট শর্ত পূরণকারী স্ট্রিং'গুলো নমনীয়ভাবে সংজ্ঞায়িত করতে পারেন।

RegExp অবজেক্ট ব্যবহার করে, আপনি সংক্ষিপ্ত এবং স্পষ্টভাবে স্ট্রিং অনুসন্ধান, যাচাই, নির্গমন এবং প্রতিস্থাপন এর মতো অপারেশন করতে পারেন। এটি ফর্ম ইনপুট যাচাইকরণ, লগ বিশ্লেষণ এবং টেক্সট ফরম্যাটিংয়ের মত দৈনন্দিন কাজে অত্যন্ত কার্যকর। নিচে কিছু সাধারণ রেগুলার এক্সপ্রেশন উদাহরণ দেয়া হলো।

1const pattern = /abc/;
  • এই রেগুলার এক্সপ্রেশনটি যাচাই করে 'abc' সিকুয়েন্সটি রয়েছে কিনা।

রেগুলার এক্সপ্রেশন তৈরির পদ্ধতি (দুইটি উপায়)

RegExp সিনট্যাক্সের দুই ধরণের প্রকারভেদ রয়েছে: লিটারেল নোটেশন এবং কনস্ট্রাক্টর নোটেশন

1// Literal notation: pattern and flags are written together
2const literal         = /hello/;
3const literalWithFlag = /hello/i;
4const literalDigits   = /\d+/;
5
6// Constructor notation: pattern and flags are passed separately
7const constructor         = new RegExp("hello");
8const constructorWithFlag = new RegExp("hello", "i");
9const constructorDigits   = new RegExp("\\d+");
  • লিটারেল নোটেশন সংক্ষিপ্ত ও পাঠযোগ্য, যা এটিকে কনস্ট্যান্ট হিসেবে ব্যবহৃত রেগুলার এক্সপ্রেশনগুলোর জন্য উপযুক্ত করে তোলে।। অন্যদিকে, আপনি যদি ভেরিয়েবল ব্যবহার করে প্যাটার্ন তৈরি করতে চান অথবা রানটাইমে এর কন্টেন্ট নির্ধারণ করতে চান, তাহলে কনস্ট্রাক্টর নোটেশন ব্যবহৃত হয়।
  • লিটারেল নোটেশনের মাধ্যমে, আপনি সহজেই রেগুলার এক্সপ্রেশন এবং এর ফ্ল্যাগগুলি একসাথে বর্ণনা করতে পারেন। এর বিপরীতে, কনস্ট্রাক্টর নোটেশনে আপনাকে প্যাটার্ন এবং ফ্ল্যাগগুলো আলাদাভাবে নির্ধারণ করতে হয়।
  • এছাড়াও, কনস্ট্রাক্টর নোটেশনে রেগুলার এক্সপ্রেশনটি স্ট্রিং আকারে দিতে হয়, তাই ব্যাকস্ল্যাশ দুইবার এস্কেপ করতে হয়।

test(): সবচেয়ে মৌলিক যাচাই

RegExp অবজেক্ট নিয়মিত এক্সপ্রেশন ব্যবহার করে মূল্যায়ন ও অপারেশন পরিচালনার জন্য বিভিন্ন মেথড সরবরাহ করে। test() একটি মেথড যা নির্ণয় করে প্যাটার্ন মিলে কিনা তা বুলিয়ান রিটার্ন করে

1const regex = /JavaScript/;
2
3console.log(regex.test("I love JavaScript")); // true
4console.log(regex.test("I love TypeScript")); // false
  • এটি শেখার জন্য প্রথম মেথড এবং শর্তানুযায়ী শাখা বা ইনপুট যাচাইয়ের জন্য আদর্শ।

match(): মিলে যাওয়া ফলাফল পাওয়া

match() মিলে যাওয়া স্ট্রিং এবং বিস্তারিত তথ্য সহ একটি অ্যারে রিটার্ন করে

1const text = "Version 1.2.3";
2const result = text.match(/\d+\.\d+\.\d+/);
3
4console.log(result[0]); // "1.2.3"
  • match() এক্সট্রাকশন ও পার্সিং প্রক্রিয়ার জন্য test() থেকে বেশি কার্যকর।

replace(): রেগুলার এক্সপ্রেশন ব্যবহার করে প্রতিস্থাপন

replace() মিলে যাওয়া অংশকে অন্য স্ট্রিংয়ে রূপান্তর করে

1const text = "Hello   World";
2const result = text.replace(/\s+/g, " ");
3
4console.log(result); // "Hello World"
  • আপনি এটি লগ ফরম্যাটিং বা অপ্রয়োজনীয় হোয়াইটস্পেস স্বাভাবিককরণে ব্যবহার করতে পারেন।

ফ্ল্যাগের প্রাথমিক ধারণা (g, i, m)

আপনি নিয়মিত এক্সপ্রেশনে 'ফ্ল্যাগ' নির্ধারণ করতে পারেন। ফ্ল্যাগ হল নিয়মিত এক্সপ্রেশন কোন নিয়ম অনুযায়ী স্ট্রিং প্রক্রিয়া করবে তা নিয়ন্ত্রণ করার জন্য বিভিন্ন অপশন। একই প্যাটার্ন থাকলেও, ফলাফল ফ্ল্যাগের উপর নির্ভর করে পরিবর্তিত হতে পারে।

1const text = "apple Apple APPLE";
2const regex = /apple/gi;        // or new RegExp("apple", "gi");
3
4console.log(text.match(regex)); // ["apple", "Apple", "APPLE"]
  • g (গ্লোবাল) ফ্ল্যাগ সম্পূর্ণ স্ট্রিং জুড়ে অনুসন্ধান করে।
  • i (ইগনোর কেস) ফ্ল্যাগ মেলানোর সময় অক্ষরের বড়-ছোট পার্থক্য উপেক্ষা করে।
1const multilineText = `apple
2banana
3apple`;
4
5const regexM = /^apple/gm;
6
7console.log(multilineText.match(regexM)); // ["apple", "apple"]
  • m (মাল্টিলাইন) ফ্ল্যাগ প্রতি লাইনের ভিত্তিতে মাল্টিলাইন স্ট্রিং বিবেচনা করতে ব্যবহৃত হয়। এটির মাধ্যমে, ^ এবং $ পুরো স্ট্রিংয়ের বদলে প্রতিটি লাইনের শুরু বা শেষে অপারেট করে।

ক্যারেক্টার ক্লাস: একাধিক বিকল্প অন্তর্ভুক্ত করা

[] স্কোয়ার ব্র্যাকেট ব্যবহার করে, একটি অবস্থানের জন্য সম্ভাব্য ক্যারেক্টার সেট নির্ধারণ করা যায়

1const regex = /gr[ae]y/;
2
3console.log(regex.test("gray")); // true
4console.log(regex.test("grey")); // true
  • এটি বানানের ভিন্নতা বা সহজ বিকল্প গ্রহণের জন্য কার্যকর।

মেটা-ক্যারেক্টার: প্রচলিত শর্টকাট

মেটাচরACTারগুলি এমন চিহ্ন, যা আপনাকে সাধারণভাবে ব্যবহৃত প্যাটার্নগুলো ছোট আকারে লিখতে সক্ষম করে।

1const regex = /\d{4}-\d{2}-\d{2}/;  // or new RegExp("\\d{4}-\\d{2}-\\d{2}");
2
3console.log(regex.test("2025-12-29")); // true
  • \d মানে একটি সংখ্যা এবং {n} পুনরাবৃত্তির সংখ্যা নির্ধারণ করে।

^ এবং $: পুরো স্ট্রিং যাচাই করুন

^ এবং $ স্ট্রিংয়ের শুরু এবং শেষ নির্দেশ করে

1const regex = /^\d+$/;
2
3console.log(regex.test("123"));   // true
4console.log(regex.test("123a"));  // false
  • ফর্ম ইনপুটের মতো সঠিক মিল প্রয়োজন, এমন ক্ষেত্রে এটা গুরুত্বপূর্ণ।

গ্রুপিং এবং ক্যাপচারিং

স্বরনির্দেশক () ব্যবহার করে, আপনি আংশিক মান বের করতে পারেন

1const text = "2025/12/29";
2const regex = /(\d{4})\/(\d{2})\/(\d{2})/;
3const [, year, month, day] = text.match(regex);
4
5console.log(year, month, day); // 2025 12 29
  • এটি তারিখ এবং গঠিত স্ট্রিং বিশ্লেষণে প্রায়ই ব্যবহৃত হয়।

সাধারণ ভুল এবং গুরুত্বপূর্ণ বিষয়াবলী

রেগুলার এক্সপ্রেশন শক্তিশালী হলেও, সেগুলো পাঠযোগ্যতা হারাতে পারে

1// Hard to read
2const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+$/;
  • যদি এটি খুব জটিল হয়ে যায়, আপনি মন্তব্য যোগ করা, এক্সপ্রেশন ভাগ করা, অথবা প্লোপ্রিয়াসটিকে পুনঃবিবেচনা করার কথা ভাবতে পারেন।

সারসংক্ষেপ

RegExp হল জাভাস্ক্রিপ্টে স্ট্রিং প্রসেসিং সহজ এবং নির্ভুলভাবে বর্ণনা করার একটি অপরিহার্য মৌলিক ফিচার। শুরতেই জটিল রেগুলার এক্সপ্রেশন শেখার প্রয়োজন নেই; বরং test, match এবং replace এর মতো মৌলিক পদ্ধতি এবং সিনট্যাক্স ব্যবহার করা গুরুত্বপূর্ণ, আপনার ব্যবহার অনুযায়ী। আপনি যদি রেগুলার এক্সপ্রেশনকে 'বিশেষ জ্ঞান' হিসেবে নয়, বরং 'অনুশাসিত প্যাটার্ন উপস্থাপনের টুল' হিসেবে দেখেন, তাহলে ইনপুট যাচাই এবং টেক্সট প্রসেসিংয়ের মান ও পাঠযোগ্যতা অনেক বাড়বে।

আপনি আমাদের ইউটিউব চ্যানেলে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে উপরের নিবন্ধটি অনুসরণ করতে পারেন। দয়া করে ইউটিউব চ্যানেলটিও দেখুন।

YouTube Video