Regex টেস্টার কীভাবে ব্যবহার করবেন
- দুই স্ল্যাশের মাঝে আপনার প্যাটার্ন লিখুন, চারপাশের
/ ছাড়া। g (সব মিল), i (কেস উপেক্ষা) ও m (মাল্টিলাইন)-এর মতো ফ্ল্যাগ চালু/বন্ধ করুন।- আপনার টেস্ট টেক্সট পেস্ট করুন। মিলগুলো ডান দিকে হাইলাইট হয় এবং নিচে ইনডেক্স ও ক্যাপচার গ্রুপসহ তালিকাভুক্ত হয়।
- প্রতিস্থাপন টিক দিয়ে
$1 বা $<name>-এর মতো প্রতিস্থাপন লিখুন, আর String.replace-এর ফলাফল প্রিভিউ দেখুন। - পরীক্ষিত ইমেইল, URL, IP বা তারিখের regex দিয়ে শুরু করতে প্যাটার্ন লাইব্রেরি থেকে একটি প্যাটার্ন বেছে নিন।
JavaScript রেগুলার এক্সপ্রেশন
এই টেস্টার আপনার ব্রাউজারের নিজস্ব RegExp ইঞ্জিন ব্যবহার করে, তাই ফলাফল হুবহু তা-ই যা JavaScript ও Node.js-এ String.match, matchAll, replace ও RegExp.exec ফেরত দেয়। এতে আধুনিক সিনট্যাক্সও আছে: নামযুক্ত গ্রুপ (?<name>…), lookbehind (?<=…), u ফ্ল্যাগসহ \p{L}-এর মতো Unicode property escape, এবং d ফ্ল্যাগসহ মিলের ইনডেক্স।
ফ্ল্যাগগুলো কী করে
| ফ্ল্যাগ | নাম | প্রভাব |
g | global | প্রথম মিলে না থেমে প্রতিটি মিল খোঁজে। |
i | ignoreCase | অক্ষর বড়/ছোট হাতের নির্বিশেষে মেলে। |
m | multiline | ^ ও $ প্রতিটি লাইনের শুরু ও শেষে মেলে। |
s | dotAll | . লাইন ব্রেকও মেলায়। |
u | unicode | প্যাটার্নকে কোড পয়েন্ট হিসেবে ধরে; \p{…} ও \u{…} চালু করে। |
y | sticky | শুধু বর্তমান lastIndex অবস্থানে মেলায়। |
d | hasIndices | প্রতিটি ক্যাপচার গ্রুপের শুরু ও শেষ অবস্থান জানায়। |
Catastrophic backtracking থেকে সুরক্ষা
(a+)+$ বা (\w|\d)*x-এর মতো নেস্টেড quantifier-যুক্ত প্যাটার্ন প্রায়-মেলা ইনপুটে এক্সপোনেনশিয়াল সময় নিতে পারে। সাধারণ ওয়েব পেজে এতে ট্যাব জমে যায়। এখানে প্রতিটি মিল একটি ব্যাকগ্রাউন্ড Web Worker-এ চলে, যা এক সেকেন্ড পরে থামিয়ে দেওয়া হয়, আর আটকে যাওয়া ব্রাউজারের বদলে আপনি একটি স্পষ্ট সতর্কবার্তা পান। প্রোডাকশন কোডে একই প্যাটার্ন ReDoS দুর্বলতা হতে পারে, তাই সতর্কবার্তাটিকে ঠিক করার মতো বাগ হিসেবে ধরুন।
ভালো regex লেখার টিপস
- পুরো মান যাচাই করার সময় প্যাটার্নকে
^ ও $ দিয়ে নোঙর করুন, নইলে স্ট্রিংয়ের যেকোনো জায়গায় মিল পেলেই পাস হয়ে যাবে।
.*-এর চেয়ে [^"]*-এর মতো নির্দিষ্ট ক্লাস ব্যবহার করুন; এগুলো দ্রুত এবং অতিরিক্ত মেলা এড়ায়।
- ক্যাপচার করা মান দরকার না হলে নন-ক্যাপচারিং গ্রুপ
(?:…) ব্যবহার করুন।
- গ্রুপগুলোর নাম দিন।
match[1]-এর চেয়ে match.groups.year পড়া সহজ।
সচরাচর জিজ্ঞাসিত প্রশ্ন
এই টেস্টার কোন regex ফ্লেভার ব্যবহার করে?
JavaScript (ECMAScript), আপনার ব্রাউজারের বিল্ট-ইন RegExp-এর মাধ্যমে। বেশিরভাগ সিনট্যাক্স PCRE, Python ও Java-র সাথে একই, কিন্তু possessive quantifier, atomic group ও (?i)-এর মতো ইনলাইন modifier JavaScript-এ নেই।
আমার প্যাটার্ন শুধু একটি মিল খুঁজে পায় কেন?
g (global) ফ্ল্যাগ ছাড়া JavaScript প্রথম মিলের পরেই থেমে যায়। প্রতিটি উপস্থিতি খুঁজতে g চালু করুন।
প্রতিস্থাপনে গ্রুপ কীভাবে উল্লেখ করব?
নম্বরযুক্ত গ্রুপের জন্য $1, $2…, নামযুক্ত গ্রুপের জন্য $<name>, পুরো মিলের জন্য $& এবং আক্ষরিক ডলার চিহ্নের জন্য $$ ব্যবহার করুন।
টেস্টার টাইমআউটে থেমে গেল কেন?
আপনার ইনপুটে প্যাটার্নটি এক সেকেন্ডের বেশি সময় নিয়েছে, যার মানে প্রায় সবসময়ই catastrophic backtracking। (x+)+-এর মতো নেস্টেড quantifier বা (a|a)*-এর মতো ওভারল্যাপিং বিকল্প খুঁজুন এবং এমনভাবে পুনর্লিখন করুন যাতে প্রতিটি অক্ষর কেবল এক উপায়ে মেলে।
আমার টেস্ট ডেটা কি কোথাও পাঠানো হয়?
না। মেলানোর কাজ আপনার ব্রাউজারের ভেতরে একটি Web Worker-এ লোকালি চলে। আপনার প্যাটার্ন ও টেক্সট শুধু আপনার নিজের ব্রাউজারে সংরক্ষিত থাকে, যাতে ফিরে এলেও সেগুলো পান।