Web Development RegExp এর Flags এর গভীরতা গাইড ও নোট

219

Flags হলো RegExp-এ ব্যবহৃত অতিরিক্ত অপশন, যা প্যাটার্নের কার্যকারিতা এবং আচরণ নির্ধারণ করে। JavaScript-এ RegExp-এ চারটি প্রধান flag ব্যবহৃত হয়: g, i, m, এবং s। প্রতিটি ফ্ল্যাগ প্যাটার্নের ব্যবহার এবং মেলানোকে পরিবর্তন করে, এবং এগুলোর সঠিক ব্যবহার আপনার কোডকে আরও শক্তিশালী ও কার্যকর করতে সাহায্য করতে পারে।


RegExp Flags এর বিস্তারিত

g (Global Search)

g ফ্ল্যাগটি প্যাটার্নের মেলানো স্ট্রিং এর সব স্থানে খুঁজে বের করতে ব্যবহৃত হয়। অর্থাৎ, এই ফ্ল্যাগ ব্যবহার করলে প্রথম ম্যাচের পরেও RegExp পরবর্তী ম্যাচগুলি খুঁজতে থাকবে।

ব্যবহার:

let regex = /hello/g;
let str = "hello world, hello again";
console.log(str.match(regex));  // ["hello", "hello"]

এখানে, g ফ্ল্যাগটি দুটি "hello"-কে খুঁজে বের করেছে, একাধিক ম্যাচ পাওয়ার জন্য।


i (Case-insensitive)

i ফ্ল্যাগটি বড় হাতের এবং ছোট হাতের অক্ষরের মধ্যে পার্থক্য অবহেলা করে। এটি একটি প্যাটার্নকে case-insensitive বা কেস-অজ্ঞেয় করে তোলে, অর্থাৎ বড় বা ছোট হাতের অক্ষর একই বলে গণ্য হয়।

ব্যবহার:

let regex = /hello/i;
let str = "Hello world";
console.log(regex.test(str));  // true

এখানে, "Hello world" স্ট্রিংয়ের মধ্যে "hello" কেস-অজ্ঞেয়ভাবে মিলিয়ে নেয়, এবং true রিটার্ন করে।


m (Multiline)

m ফ্ল্যাগটি মাল্টি-লাইন স্ট্রিংয়ের মধ্যে প্যাটার্নের মেলানো চালাতে ব্যবহৃত হয়। এটি স্ট্রিংয়ের নতুন লাইনে (newline) শুরু হওয়া প্যাটার্নগুলিকে চিনতে সক্ষম করে।

ব্যবহার:

let regex = /^hello/m;
let str = `hello
world`;
console.log(regex.test(str));  // true

এখানে, m ফ্ল্যাগটি "hello" স্ট্রিংয়ের প্রথম লাইনে মেলাতে সক্ষম হয়েছে, কারণ এটি মাল্টি-লাইন প্যাটার্ন খোঁজে।


s (Dot All)

s ফ্ল্যাগটি স্ট্রিংয়ের মধ্যে সব ধরনের চরিত্র (নতুন লাইনের চরিত্র সহ) মেলাতে সক্ষম করে। সাধারনত, ডট (.) শুধুমাত্র একটি লাইনের মধ্যে থাকা কোনো চরিত্র (নতুন লাইন ছাড়া) মেলাতে পারে। তবে s ফ্ল্যাগটি ব্যবহার করলে, এটি ডটকে নতুন লাইনসহ সমস্ত চরিত্রের জন্য মেলাবে।

ব্যবহার:

let regex = /hello.world/s;
let str = `hello
world`;
console.log(regex.test(str));  // true

এখানে, s ফ্ল্যাগটির কারণে ডট (.) নতুন লাইনও মিলিয়ে নেবে এবং "hello\nworld" স্ট্রিংয়ের মধ্যে মেলানো ঘটবে।


Flags এর কম্বিনেশন

একটি RegExp প্যাটার্নে একাধিক ফ্ল্যাগ একসাথে ব্যবহার করা সম্ভব। একাধিক ফ্ল্যাগ ব্যবহার করলে প্যাটার্নের কার্যকারিতা আরও বিস্তৃত হয়।

উদাহরণ:

let regex = /hello/i.g;
let str = "Hello hello";
console.log(str.match(regex));  // ["Hello", "hello"]

এখানে, i এবং g ফ্ল্যাগ একসাথে ব্যবহৃত হয়েছে। i ফ্ল্যাগের কারণে "Hello" এবং "hello" উভয়ই মেলানো হচ্ছে, এবং g ফ্ল্যাগের কারণে সমস্ত মিলগুলো খুঁজে বের হচ্ছে।


সারাংশ

RegExp-এর flags গুলি একটি প্যাটার্নের আচরণ নিয়ন্ত্রণ করে এবং এটি স্ট্রিংয়ের মধ্যে প্যাটার্নের মেলানোর ফলাফলকে প্রভাবিত করে।

  • g ফ্ল্যাগ গ্লোবাল সার্চ করতে ব্যবহৃত হয়,
  • i ফ্ল্যাগ কেস-অজ্ঞেয় প্যাটার্ন ম্যাচিংয়ের জন্য,
  • m ফ্ল্যাগ মাল্টি-লাইন স্ট্রিংয়ের জন্য,
  • s ফ্ল্যাগ ডট চরিত্রকে নতুন লাইন সহ সব ধরনের চরিত্র মেলানোর জন্য ব্যবহৃত হয়।

এই ফ্ল্যাগগুলির ব্যবহার নিশ্চিত করে, আপনার RegExp আরও শক্তিশালী এবং নমনীয়ভাবে স্ট্রিংয়ের মধ্যে প্যাটার্ন খুঁজে বের করতে পারে।

Content added By

g (Global Matching)

196

JavaScript এর RegExp ফ্ল্যাগগুলির মধ্যে g (Global) একটি বিশেষ ফ্ল্যাগ, যা একাধিক মিল খুঁজে বের করতে ব্যবহৃত হয়। যখন একটি RegExp প্যাটার্নে g ফ্ল্যাগ ব্যবহার করা হয়, তখন এটি স্ট্রিংয়ের মধ্যে প্যাটার্নটির সব মিল খুঁজে বের করার চেষ্টা করে, একবারের বেশি।


g ফ্ল্যাগ এর কার্যকারিতা

যখন আপনি g ফ্ল্যাগ ব্যবহার করেন, তখন RegExp স্ট্রিংয়ের মধ্যে প্যাটার্নটির সব মিল খুঁজে বের করে এবং প্রথম মিল পাওয়ার পর অবশেষে পরবর্তী মিলটি খুঁজতে থাকে, যতক্ষণ না পুরো স্ট্রিংটি স্ক্যান হয়ে যায়।

এই ফ্ল্যাগটি সাধারণত exec() অথবা match() পদ্ধতির সাথে ব্যবহার করা হয়, যাতে একাধিক ম্যাচ পাওয়া যায়।


g ফ্ল্যাগ এর উদাহরণ

উদাহরণ ১: match() পদ্ধতির মাধ্যমে

g ফ্ল্যাগ ব্যবহার করলে match() পদ্ধতি স্ট্রিংয়ের মধ্যে সমস্ত মিল সংগ্রহ করবে।

let regex = /cat/g;
let str = "The cat sat on the cat mat.";
let result = str.match(regex);

console.log(result);
// আউটপুট: ['cat', 'cat']

এখানে, cat প্যাটার্নটি দুইবার স্ট্রিংয়ে উপস্থিত, তাই match() পদ্ধতি দুটি মিল রিটার্ন করছে।


উদাহরণ ২: exec() পদ্ধতির মাধ্যমে

exec() পদ্ধতির সাথে g ফ্ল্যাগ ব্যবহার করলে আপনি একাধিক মিল এবং তাদের ইনডেক্স (অবস্থান) খুঁজে বের করতে পারবেন। প্রতিবার exec() কল করলে এটি পরবর্তী মিলের তথ্য দেবে।

let regex = /cat/g;
let str = "The cat sat on the cat mat.";
let result;

while ((result = regex.exec(str)) !== null) {
  console.log(`Found ${result[0]} at index ${result.index}`);
}

আউটপুট:

Found cat at index 4
Found cat at index 22

এখানে, g ফ্ল্যাগের কারণে exec() পদ্ধতি স্ট্রিংয়ের মধ্যে সব মিল খুঁজে পাচ্ছে এবং তাদের ইনডেক্সও প্রদান করছে।


উদাহরণ ৩: replace() পদ্ধতির মাধ্যমে

g ফ্ল্যাগটি ব্যবহার করলে replace() পদ্ধতিটি সমস্ত মিল পরিবর্তন করতে সক্ষম হয়, একবারে একটি মিল পরিবর্তনের বদলে সব মিল পরিবর্তন করবে।

let regex = /cat/g;
let str = "The cat sat on the cat mat.";
let result = str.replace(regex, "dog");

console.log(result);
// আউটপুট: "The dog sat on the dog mat."

এখানে, replace() পদ্ধতি cat প্যাটার্নটি স্ট্রিংয়ের মধ্যে সব জায়গায় পরিবর্তন করেছে এবং "dog" দিয়ে প্রতিস্থাপন করেছে।


g ফ্ল্যাগের সাথে অন্যান্য মেথডের ব্যবহার

g ফ্ল্যাগটি একাধিক মিল খুঁজে বের করার জন্য ব্যবহার করা হয়, এবং এটি সাধারণত exec() এবং match() এর সাথে ব্যবহৃত হয়। এছাড়া, replace() পদ্ধতিতেও এটি ব্যবহার করা হয় যাতে সব মিল একসাথে পরিবর্তন করা যায়।


সারাংশ

RegExp-এ g (Global) ফ্ল্যাগটি স্ট্রিংয়ের মধ্যে সব মিল খুঁজে বের করার জন্য ব্যবহৃত হয়। এটি match(), exec(), এবং replace() পদ্ধতির সাথে ব্যবহার করা হয় যাতে একাধিক মিল পাওয়া যায় এবং তাদের সাথে কাজ করা যায়। g ফ্ল্যাগ ব্যবহার করলে RegExp শুধুমাত্র প্রথম মিলের পরবর্তী মিল খুঁজতে থাকে, যতক্ষণ না সমস্ত স্ট্রিং পরীক্ষা হয়ে যায়।

Content added By

i (Case-insensitive Matching)

202

JavaScript-এ i হল একটি ফ্ল্যাগ যা রেগুলার এক্সপ্রেশন (RegExp) এর সাথে ব্যবহার করা হয় এবং এটি case-insensitive matching করতে সাহায্য করে। এর মানে হল, প্যাটার্নটি বড় হাতের বা ছোট হাতের অক্ষর নির্বিশেষে ম্যাচ করবে।


i ফ্ল্যাগ এর ব্যবহার

i ফ্ল্যাগটি রেগুলার এক্সপ্রেশনকে এমনভাবে কনফিগার করে যে এটি case-sensitive (বড়/ছোট অক্ষরের পার্থক্য) না করে, বড় বা ছোট অক্ষর নির্বিশেষে মিল খুঁজে পায়।


সিনট্যাক্স

let regex = /pattern/i;

এখানে, /pattern/i প্যাটার্নটি "pattern" শব্দটি case-insensitive ভাবে খুঁজবে, অর্থাৎ "pattern", "Pattern", "pAtTeRn" ইত্যাদি সব রকম ভ্যারিয়েশনকেই মিলিয়ে ফেলবে।


উদাহরণ

উদাহরণ ১: Case-insensitive Matching

let regex = /hello/i;
let str1 = "Hello world";
let str2 = "HELLO world";
let str3 = "HeLLo world";

console.log(regex.test(str1));  // true
console.log(regex.test(str2));  // true
console.log(regex.test(str3));  // true

এখানে, hello প্যাটার্নটি i ফ্ল্যাগের কারণে "Hello", "HELLO", এবং "HeLLo" সব ক্ষেত্রেই মিল পাচ্ছে।

উদাহরণ ২: Case-sensitive Matching (যেখানে i ফ্ল্যাগ নেই)

let regex = /hello/;
let str1 = "Hello world";
let str2 = "HELLO world";
let str3 = "HeLLo world";

console.log(regex.test(str1));  // true
console.log(regex.test(str2));  // false
console.log(regex.test(str3));  // false

এখানে, hello প্যাটার্নটি কোনো i ফ্ল্যাগ ছাড়া শুধুমাত্র small 'hello' এর সাথে মিল খুঁজবে এবং বড় হাতের "HELLO" বা "HeLLo" এর সাথে মিল খুঁজবে না।


i ফ্ল্যাগ এবং অন্যান্য প্যাটার্ন

i ফ্ল্যাগটি অন্যান্য RegExp প্যাটার্নের সাথে মিশিয়ে ব্যবহার করা যেতে পারে, যেমন:

উদাহরণ ৩: নির্দিষ্ট শব্দের মধ্যে case-insensitive মিল খোঁজা

let regex = /\bcat\b/i;
let str1 = "The Cat is cute";
let str2 = "The dog is cute";

console.log(regex.test(str1));  // true
console.log(regex.test(str2));  // false

এখানে, \bcat\b প্যাটার্নটি "Cat" শব্দের সাথে মিল পাচ্ছে, কারণ i ফ্ল্যাগের মাধ্যমে এটি "cat" বা "Cat" যেকোনোভাবে মিল খুঁজে পাচ্ছে।


সারাংশ

i ফ্ল্যাগ RegExp-এ case-insensitive matching সক্ষম করে। এর মাধ্যমে প্যাটার্নটি বড় হাতের এবং ছোট হাতের অক্ষরের পার্থক্য বিবেচনা না করে মিল খুঁজে পায়। এটি কোডে কেস ভেরিয়েশনকে উপেক্ষা করে নির্দিষ্ট প্যাটার্ন খোঁজার জন্য একটি শক্তিশালী টুল।

Content added By

m (Multiline Matching)

247

RegExp-এর multiline matching বা মাল্টিলাইন ম্যাচিং হল একটি ফিচার যা আপনাকে স্ট্রিংয়ের বহু লাইনে প্যাটার্ন ম্যাচ করার সুবিধা দেয়। সাধারণত, RegExp-এর ^ (caret) এবং $ (dollar sign) চিহ্নগুলি স্ট্রিংয়ের শুরু এবং শেষ নির্দেশ করে, কিন্তু মাল্টিলাইন মুড সক্রিয় করলে এই চিহ্নগুলি স্ট্রিংয়ের প্রতিটি লাইনের শুরু এবং শেষ এর সাথে মেলাবে।


Multiline Matching কীভাবে কাজ করে?

JavaScript RegExp-এর ডিফল্ট আচরণ হলো ^ এবং $ চিহ্ন শুধুমাত্র পুরো স্ট্রিংয়ের শুরু এবং শেষের সাথে মিলবে। তবে যদি আপনি multiline matching ব্যবহার করেন, তাহলে এই চিহ্নগুলি প্রতিটি লাইনের শুরু এবং শেষের সাথে মিলবে। মাল্টিলাইন মুড সক্রিয় করতে m ফ্ল্যাগ ব্যবহার করতে হয়।


m ফ্ল্যাগ (Multiline Matching Flag)

মাল্টিলাইন মুডে প্যাটার্নটি লাইনের ভিতরের প্রথম এবং শেষ স্থানগুলোকে চেক করতে সক্ষম হয়। এই মুডটি সক্রিয় করতে, আপনাকে RegExp প্যাটার্নের সাথে m ফ্ল্যাগ যোগ করতে হবে।

সিনট্যাক্স:

let regex = /^pattern/m;

এখানে, ^ চিহ্নটি স্ট্রিংয়ের শুধুমাত্র প্রথম অংশ নয়, বরং প্রতিটি লাইনের প্রথম অংশের সাথে মিলবে। একইভাবে, $ চিহ্নটি প্রতিটি লাইনের শেষ অংশের সাথে মেলাবে।


উদাহরণ: ^ (Caret) চিহ্নের ব্যবহার

let regex = /^hello/m;
let str = `hello world
this is a test
hello again`;
console.log(regex.test(str));  // true

এখানে, ^hello প্যাটার্নটি প্রতিটি লাইনের শুরুতে "hello" খুঁজবে। তাই এটি "hello world" এবং "hello again" লাইনে মিলে যাবে।


উদাহরণ: $ (Dollar) চিহ্নের ব্যবহার

let regex = /world$/m;
let str = `hello world
this is a test
goodbye world`;
console.log(regex.test(str));  // true

এখানে, world$ প্যাটার্নটি প্রতিটি লাইনের শেষে "world" খুঁজবে। তাই এটি "hello world" এবং "goodbye world" লাইনে মিলে যাবে।


Multiline Matching এর ব্যবহার

  1. ^ চিহ্ন: এটি প্রতিটি লাইনের শুরুতে মেলে। মাল্টিলাইন মুডে, এটি পুরো স্ট্রিংয়ের প্রথম অংশের পরিবর্তে প্রতিটি লাইনের প্রথম অংশে মিলবে।
  2. $ চিহ্ন: এটি প্রতিটি লাইনের শেষে মেলে। মাল্টিলাইন মুডে, এটি পুরো স্ট্রিংয়ের শেষ অংশের পরিবর্তে প্রতিটি লাইনের শেষ অংশে মিলবে।

মাল্টিলাইন মুডের ব্যবহারিক প্রয়োগ

১. একাধিক লাইনে নির্দিষ্ট শব্দের শুরু খোঁজা:

let regex = /^test/m;
let str = `hello world
test first line
test second line
end of test`;
console.log(regex.test(str));  // true

২. একাধিক লাইনে নির্দিষ্ট শব্দের শেষ খোঁজা:

let regex = /test$/m;
let str = `start of test
middle of test
test at the end`;
console.log(regex.test(str));  // true

সারাংশ

Multiline matching RegExp-এ m ফ্ল্যাগ ব্যবহার করে স্ট্রিংয়ের প্রতিটি লাইনের শুরু এবং শেষ অংশে মিল খুঁজে পাওয়া যায়। এই ফিচারটি আপনাকে একাধিক লাইনের মধ্যে নির্দিষ্ট প্যাটার্ন খুঁজে বের করতে সাহায্য করে এবং এটি বিশেষ করে ^ এবং $ চিহ্নের আচরণ পরিবর্তন করে। m ফ্ল্যাগটি যুক্ত করলে, প্যাটার্নগুলি শুধু পুরো স্ট্রিংয়ের শুরু বা শেষে নয়, বরং প্রতিটি লাইনের শুরু এবং শেষেও মিলবে।

Content added By

u (Unicode Support)

224

RegExp-এ u ফ্ল্যাগ বা Unicode flag ব্যবহৃত হয়, যা JavaScript-এর RegExp-এর মাধ্যমে ইউনিকোড (Unicode) চরিত্রের সাথে সঠিকভাবে মেলানোর সুবিধা প্রদান করে। এটি বিশেষ করে গুরুত্বপূর্ণ যখন আপনি বাইট বা সেন্ট্রাল চরিত্র ব্যবহার করেন, যেমন অক্ষর যা Unicode-এর চারটি বা তার অধিক বাইট ব্যবহার করে। u ফ্ল্যাগটির সাহায্যে JavaScript RegExp-এ ইউনিকোড চরিত্রগুলি সঠিকভাবে মেলানো যায়, বিশেষত যেগুলি UTF-16 সংজ্ঞায়িত ইউনিকোডের বাইরে (যেমন, Emojis বা অন্যান্য আন্তর্জাতিক চরিত্র)।


u ফ্ল্যাগের ব্যবহার

যখন u ফ্ল্যাগটি RegExp-এ যুক্ত করা হয়, তখন এটি মেলে এমন চরিত্রগুলিকে Unicode অনুযায়ী সঠিকভাবে চিহ্নিত করে। এর ফলে বিশেষ ধরনের চরিত্র, যেমন surrogate pairs (দ্বৈত বাইট ইউনিকোড চরিত্র) সঠিকভাবে একক চরিত্র হিসেবে বিবেচিত হবে।


Unicode প্যাটার্নের একটি উদাহরণ:

let regex = /\u{1F600}/u; // Unicode for 😀 (grinning face emoji)
let str = "😀 Hello!";
console.log(regex.test(str));  // true

এখানে, /\u{1F600}/u প্যাটার্নটি Unicode ইমোজি 😀 এর সাথে মেলে, এবং এটি সঠিকভাবে সনাক্ত করা হবে কারণ u ফ্ল্যাগটি যুক্ত করা হয়েছে। যদি আপনি u ফ্ল্যাগটি বাদ দেন, তাহলে RegExp ভুলভাবে এটি প্রক্রিয়া করতে পারে।


u ফ্ল্যাগ এবং Surrogate Pairs

Surrogate pairs এমন ইউনিকোড চরিত্রগুলির জন্য ব্যবহৃত হয় যা UTF-16 এ একক ইউনিকোড পয়েন্ট হিসেবে রূপান্তরিত হতে পারে না। এই ধরনের চরিত্রগুলি দুইটি 16-বিট ইউনিটের মাধ্যমে সংরক্ষিত হয়। যখন আপনি u ফ্ল্যাগ ব্যবহার করেন, তখন JavaScript সঠিকভাবে surrogate pair হিসেবে এই ধরনের চরিত্রগুলি পরিচালনা করে।


উদাহরণ: Surrogate Pair-এ সমস্যা

let regex = /𠜎/;  // A character from the "CJK Ideographs Extension B" block
let str = "𠜎 is a Chinese character.";
console.log(regex.test(str));  // false (without `u` flag)

এই ক্ষেত্রে, Unicode চরিত্র 𠜎 সঠিকভাবে মেলা হবে না যদি আপনি u ফ্ল্যাগ ব্যবহার না করেন, কারণ এটি surrogate pair হিসেবে প্রতিনিধিত্ব করা হয়েছে। এটি একক ইউনিকোড পয়েন্টের মতো কাজ করবে না যদি না আপনি u ফ্ল্যাগ ব্যবহার করেন।


সমাধান: u ফ্ল্যাগ ব্যবহার করা

let regex = /𠜎/u;  // Unicode character from CJK Ideographs Extension B block
let str = "𠜎 is a Chinese character.";
console.log(regex.test(str));  // true (with `u` flag)

এখন u ফ্ল্যাগ ব্যবহার করার কারণে, এটি সঠিকভাবে 𠜎 ইউনিকোড চরিত্রের সাথে মেলে এবং স্ট্রিংটি সঠিকভাবে পরীক্ষা করা হয়।


u ফ্ল্যাগ ছাড়া ইউনিকোড মেলানো

যদি আপনি u ফ্ল্যাগটি ব্যবহার না করেন, RegExp surrogate pair এবং Unicode character সঠিকভাবে চিহ্নিত করতে পারবে না। এর ফলে এটি বিভ্রান্তিকর ফলাফল দিতে পারে।


সারাংশ

u ফ্ল্যাগ (Unicode support) JavaScript RegExp-এ ইউনিকোড চরিত্র এবং surrogate pairs সঠিকভাবে চিহ্নিত করতে সাহায্য করে। এটি বিশেষভাবে গুরুত্বপূর্ণ যখন আপনি এমন চরিত্র ব্যবহার করেন যা UTF-16 এর বাইরে, যেমন ইমোজি বা অন্যান্য আন্তর্জাতিক অক্ষর। u ফ্ল্যাগটি RegExp-কে আরও শক্তিশালী এবং সব ধরনের Unicode চরিত্রের জন্য কার্যকরী করে তোলে।

Content added By

s (Dotall Mode)

243

s ফ্ল্যাগ, যা Dotall Mode নামেও পরিচিত, একটি RegExp বৈশিষ্ট্য যা dot (.) চিহ্নের আচরণ পরিবর্তন করে। সাধারণভাবে, dot (.) চিহ্নটি স্ট্রিংয়ের একটি লাইনের মধ্যে যেকোনো চরিত্র (নতুন লাইন ছাড়া) মেলে। কিন্তু Dotall Mode (s ফ্ল্যাগ) সক্রিয় করলে, dot (.) চিহ্নটি নতুন লাইন (newline) সহ সমস্ত চরিত্রকেই মেলাতে পারে।

এটি বিশেষভাবে দরকারী যখন আপনি multiline স্ট্রিং বা একাধিক লাইনের মধ্যে কোনো প্যাটার্ন খুঁজতে চান।


সাধারণভাবে Dot (.) এর ব্যবহার

সাধারণ RegExp-এ dot (.) চিহ্ন শুধুমাত্র একটি লাইন এর মধ্যে সমস্ত চরিত্রের সাথে মেলে, কিন্তু এটি new line (\n) কে মেলাবে না।


উদাহরণ:

let regex = /a.b/;
let str = "a\nb";
console.log(regex.test(str));  // false

এখানে, /a.b/ প্যাটার্নটি স্ট্রিং "a\nb" এর মধ্যে a এবং b এর মধ্যে কোনো অক্ষর খুঁজে পাচ্ছে না, কারণ dot (.) চিহ্নটি নতুন লাইন \n কে মেলাতে পারে না।


s (Dotall Mode) সক্রিয় করা

JavaScript-এ s ফ্ল্যাগ যোগ করলে dot (.) চিহ্নটি স্ট্রিংয়ের নতুন লাইনসহ সমস্ত চরিত্রের সাথে মেলাতে পারে। সেক্ষেত্রে, ডট চিহ্নটি শুধু এক লাইনের মধ্যে নয়, স্ট্রিংয়ের পুরো অংশের মধ্যে যে কোনো চরিত্রকে মেলাবে।

এটি করার জন্য RegExp প্যাটার্নের সাথে /s ফ্ল্যাগ ব্যবহার করতে হবে।


উদাহরণ:

let regex = /a.b/s;
let str = "a\nb";
console.log(regex.test(str));  // true

এখানে, /a.b/s প্যাটার্নটি স্ট্রিং "a\nb" এর মধ্যে a এবং b এর মধ্যে থাকা নতুন লাইন \n কে মেলাতে সক্ষম হচ্ছে, কারণ s (Dotall Mode) ফ্ল্যাগটি সক্রিয় করা হয়েছে।


ব্যবহার:

  • Dotall Mode (s) ব্যবহার করে আপনি একাধিক লাইনের মধ্যে বা স্ট্রিংয়ের ভেতরে নতুন লাইন সহ সমস্ত চরিত্র মেলাতে পারবেন।
  • সাধারণত আপনি যখন multiline ডাটা বা প্যাটার্নে নতুন লাইনের মধ্যে কিছু খুঁজতে চান, তখন Dotall Mode ব্যবহার করা হয়।

সারাংশ

s (Dotall Mode) ফ্ল্যাগ RegExp-এ dot (.) চিহ্নের আচরণ পরিবর্তন করে, যা স্ট্রিংয়ের নতুন লাইন সহ সমস্ত চরিত্র মেলাতে সক্ষম হয়। সাধারণভাবে, dot (.) শুধুমাত্র একটি লাইনের মধ্যে মেলে, তবে s ফ্ল্যাগটি নতুন লাইনসহ সম্পূর্ণ স্ট্রিংয়ের চরিত্রগুলোকে মেলানোর সুবিধা দেয়।

Content added By

y (Sticky Matching)

203

Sticky Matching একটি RegExp এর বিশেষ বৈশিষ্ট্য যা শুধুমাত্র স্ট্রিংয়ের বর্তমান পজিশন থেকে মেলা প্যাটার্ন খুঁজে বের করার জন্য ব্যবহৃত হয়। এটি y (sticky) ফ্ল্যাগ এর মাধ্যমে সক্রিয় করা যায়, যা স্ট্রিংয়ের মেলানোর প্রক্রিয়াকে আরো নির্দিষ্ট এবং সীমাবদ্ধ করে তোলে।


Sticky Matching কী?

Sticky Matching বা y ফ্ল্যাগ RegExp এর একটি বৈশিষ্ট্য, যা মেলানোর প্রক্রিয়াকে প্রথম অবস্থান থেকে শুরু করতে বাধ্য করে। যখন y ফ্ল্যাগ ব্যবহার করা হয়, তখন এটি শুধুমাত্র স্ট্রিংয়ের যে পজিশনে মেলা শুরু হয়, সেখান থেকেই মেলা করতে চেষ্টা করে। অর্থাৎ, এটি স্ট্রিংয়ের পূর্ববর্তী অংশে কোনো মিল খোঁজে না, বরং শুধুমাত্র কারেক্ট পজিশনে মিল খুঁজতে কাজ করে।

এটি সাধারণত প্যাটার্নের প্রথম অবস্থান থেকে পরবর্তী মিল অনুসন্ধানে ব্যবহৃত হয়। এর মানে, যখন একটি প্যাটার্ন একটি নির্দিষ্ট পজিশনে মেলে না, তখন এটি আর পরবর্তী অংশে মেলা খুঁজবে না


y ফ্ল্যাগ এর ব্যবহার

y ফ্ল্যাগ ব্যবহার করার সময়, RegExp শুধুমাত্র বর্তমান পজিশন থেকে মিলাতে চেষ্টা করবে এবং যদি কোনো মিল না পায়, তবে এটি পরবর্তী স্ট্রিং অংশে খুঁজবে না।


Syntax:

let regex = /pattern/y;

এখানে, /pattern/y প্যাটার্নটি sticky matching মোডে চলে যাবে, যা শুধুমাত্র বর্তমান পজিশনে মেলাতে চেষ্টা করবে।


উদাহরণ: Sticky Matching

let regex = /abc/y;
let str = "abcabc";
console.log(regex.test(str));  // true
console.log(regex.test(str));  // false

এখানে, প্রথম test() মেথডে "abc" স্ট্রিংয়ের প্রথম অবস্থানে abc প্যাটার্নটি মেলে। কিন্তু দ্বিতীয়বার test() কল করার পর, RegExp বর্তমানে স্ট্রিংয়ের পরবর্তী অবস্থানে (যেটি "abc" পরবর্তী অংশ) মেলা খুঁজবে এবং সেখানেও abc প্যাটার্নটি মেলে না, কারণ sticky matching মোড সক্রিয় থাকায় প্রথম মিলের পরে এটি আর কোনো স্থানে খোঁজে না।


g ফ্ল্যাগ এবং y ফ্ল্যাগের মধ্যে পার্থক্য

  • g (global) ফ্ল্যাগ RegExp প্যাটার্নটি পুরো স্ট্রিংয়ে সমস্ত মিল খুঁজে বের করতে ব্যবহৃত হয়।
    • এটি প্রথম মিল পাওয়ার পর পরবর্তী মিল খুঁজতে স্ট্রিংয়ের পরবর্তী অংশে চলে যায়।
  • y (sticky) ফ্ল্যাগ RegExp প্যাটার্নটি শুধুমাত্র বর্তমান অবস্থান থেকে মিল খুঁজতে চেষ্টা করে। এটি প্রথম মিলের পরে পরবর্তী মিল খোঁজার জন্য স্ট্রিংয়ের পরবর্তী অংশে যায় না

উদাহরণ: g এবং y ফ্ল্যাগের পার্থক্য

let regexGlobal = /abc/g;
let regexSticky = /abc/y;
let str = "abcabc";

console.log(regexGlobal.test(str));  // true
console.log(regexGlobal.test(str));  // true
console.log(regexSticky.test(str));  // true
console.log(regexSticky.test(str));  // false

এখানে, regexGlobal এর মাধ্যমে প্রথম মিল পাওয়ার পর দ্বিতীয়বার test() কল করলে এটি পরবর্তী মিল খুঁজে পায় এবং মেলে যায়। কিন্তু regexSticky এর মাধ্যমে, প্রথম মিল পাওয়ার পর দ্বিতীয়বার test() কল করলে এটি পরবর্তী অংশে আর মিল খুঁজবে না, কারণ y ফ্ল্যাগটি সেট করা আছে এবং এটি sticky মোডে চলেছে।


যখন y ফ্ল্যাগ ব্যবহার করবেন

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


সারাংশ

Sticky Matching (y ফ্ল্যাগ) RegExp প্যাটার্নটি স্ট্রিংয়ের নির্দিষ্ট অবস্থান থেকে মিল খুঁজতে সাহায্য করে। এটি global (g) ফ্ল্যাগের বিপরীতে, যেখানে স্ট্রিংয়ের পুরো অংশে মিল খোঁজা হয়, সেখানে sticky matching প্যাটার্নটি শুধুমাত্র বর্তমান অবস্থানে মিল খুঁজবে। y ফ্ল্যাগ ব্যবহার করে আপনি নিশ্চিত করতে পারেন যে প্রথম মিল পাওয়ার পর পরবর্তী অংশে খোঁজা হবে না।

Content added By
Promotion

Are you sure to start over?

Loading...