অপেরেশন, Regular Expression
ধর, তুই একটা বইতে কোনো নির্দিষ্ট শব্দ খুঁজতে চাস, যেমন 'apple' বা 'orange'। কিন্তু তুই হয়তো পুরা শব্দটা জানস না। হতে পারে তুই ভাবতেছস, কোনো একটা লেটার দিয়ে শুরু হইছে, তারপর দুইটা pp আছে, এরপর একটা ‘ l ’ আছে, এরপর কী আছে, তোর মনে নাই। এইরকম পারশিয়াল ম্যাচিং কিংবা প্যাটার্ন দিয়ে তুই শব্দ খুঁজে বের করতে পারিস। আর একজাক্ট শব্দ বা বাক্য জানলে সেটা তো অবশ্যই বের করতে পারবি।
আর প্যাটার্ন বা আংশিক ম্যাচিং দিয়ে স্ট্রিং খুঁজে বের করার এই সিস্টেম বেশির ভাগ প্রোগ্রামিং লাঙ্গুয়েজেই আছে। জাভাস্ক্রিপ্টেও আছে । আর এইটার নাম হচ্ছে Regular Expressions (RegEx)।
Regular Expression (RegEx) কী?
Regular Expression হলো একধরনের প্যাটার্ন বা নিয়ম, যার মাধ্যমে তুই কোনো টেক্সটের মধ্যে নির্দিষ্ট কিছু খুঁজে বের করতে পারিস, সেই টেক্সটের একটা অংশ পরিবর্তন করতে পারিস বা চেক করতে পারিস, সেটা কোনো শর্ত পূরণ করে কি না।
জাভাস্ক্রিপ্টে RegEx তৈরি করার জন্য দুইভাবে ব্যবহার করতে পারিস। একটা হতে পারে সরাসরি ফরওয়ার্ড স্ল্যাশ চিহ্নের (/) মধ্যে লিখে। আরেকটা হতে পারে new RegExp() কন্সট্রাক্টরের ইউজ করে।
const pattern = /apple/;
const pattern = new RegExp("apple");RegEx ইউজ করে টেক্সটের মধ্যে যেকোনো নির্দিষ্ট শব্দ খুঁজে পাওয়া যায়। যেমন ধর, তুই একটা বাক্যে "apple" শব্দটা আছে কি না চেক করতে চাস।
const sentence = "I have an apple.";
const pattern = /apple/;
console.log(pattern.test(sentence));
Output: trueএখানে .test() মেথড ব্যবহার করা হয়েছে, যেটা true বা false রিটার্ন করবে। প্যাটার্ন ম্যাচ করলে true, না করলে false।
আবার RegEx দিয়ে টেক্সটের নির্দিষ্ট অংশ replace করা খুব সহজ। ধর, তুই "apple" শব্দটাকে "banana" দিয়ে replace করতে চাস।
const sentence = "I have an apple and another apple.";
const newSentence = sentence.replace(/apple/g, "banana");
console.log(newSentence);
Output: I have a banana and another banana.এখানে /apple/g মানে, টেক্সটে যতবারই "apple" আছে, সবগুলোকে "banana" দিয়ে replace করবে। g মানে global, মানে সব মিলগুলোকে ধরবে।
কিছু সাধারণ RegEx প্যাটার্ন
. – যেকোনো একটা ক্যারেক্টার।
\d – যেকোনো ডিজিট (0 থেকে 9)।
\w – যেকোনো ওয়ার্ড ক্যারেক্টার (a-z, A-Z, 0-9, _)।
\s – স্পেস।
+ – প্যাটার্ন একবার বা তার বেশি আছে।
* – প্যাটার্ন 0 বা একবারের বেশি আছে।
^ – টেক্সটের শুরু।
$ – টেক্সটের শেষ।
ই-মেইল ভ্যালিডেশন
ধর, তুই একটা ই-মেইল চেক করতে চাস। তবে একেকজনের ইমেইল একেক রকমের হবে। কারো বড়, আবার কারো ছোট । তবে এইটার মধ্যে একটা প্যাটার্ন আছে। সেটা ছেক করার জন্য তুই নিচের একটা বিদঘুটে টাইপের রেগুলার এক্সপ্রেশন ইউজ করতে পারস।
const email = "example@mail.com";
const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
console.log(emailPattern.test(email));
Output: trueএখানে ই-মেইলের জন্য একটা কমপ্লেক্স প্যাটার্ন ব্যবহার করা হয়েছে, যাতে ই-মেইল ঠিকঠাক ফরম্যাটে আছে কি না, চেক করা যায়।
ফোন নম্বর চেক করা
বাংলাদেশের ফোন নম্বরের জন্য একটা বেসিক প্যাটার্ন হতে পারে /^01[3-9]\d{8}$/। ধর এটা দিয়ে চেক কর, ফোন নম্বর ঠিকঠাক আছে কি না।
const phone = "01712345678";
const phonePattern = /^01[3-9]\d{8}$/;
console.log(phonePattern.test(phone));
Output: trueRegEx-এর Flags
g – global, সব ম্যাচ ধরবে।
i – case-insensitive, বড়-ছোটো হাতের ক্যারেক্টার একইভাবে ধরবে।
Regular Expression হলো টেক্সটের মধ্যে নির্দিষ্ট কিছু খুঁজে বের করার, চেক করার বা পরিবর্তন করার একটা উপায়। RegEx দিয়ে অনেক কিছুই করা যায়, যেমন ডেটা ভ্যালিডেশন, টেক্সট সার্চ, replace ইত্যাদি। এটা একটু কঠিন মনে হতে পারে শুরুতে, কিন্তু প্র্যাকটিস করলে সহজ হয়ে যাবে!
Practice:
- একটা বাক্যে "I bought an orange" লেখা আছে, এখন "orange"-কে "grape" দিয়ে পরিবর্তন কর।
- "ana" শব্দটি "I like to have apple and banana" বাক্যে আছে কি না, চেক কর।
- "I am eating apple. apple is good. apple helps me a lot." এখানে "apple" শব্দটি পুরো টেক্সটের মধ্যে সব জায়গায় "JavaScript" দিয়ে পরিবর্তন কর। g ফ্ল্যাগের মাধ্যমে পুরো টেক্সটের সব চেইঞ্জ কর।