Skip to content
Regex টেস্টার
Tools

Regex টেস্টার

নতুন

লাইভ ম্যাচ হাইলাইট, ক্যাপচার গ্রুপ ও রিপ্লেস প্রিভিউ সহ রেগুলার এক্সপ্রেশন পরীক্ষা করুন।

/ /
0 matches

Match highlight

 

Matches & groups

Replace

 
Regex cheatsheetquick reference
\d \D
digit / non-digit
\w \W
word char / non-word char
\s \S
whitespace / non-whitespace
.
any char (except newline without s flag)
^ $
start / end of string (line with m flag)
\b \B
word boundary / non-boundary
[abc] [^abc]
char set / negated set
[a-z0-9]
char range
a* a+ a?
0+ / 1+ / 0 or 1
a{3} a{2,5} a{2,}
exactly 3 / 2–5 / 2 or more
a*? a+?
lazy (non-greedy) quantifiers
(abc)
capture group → $1
(?<name>abc)
named group → $<name>
(?:abc)
non-capturing group
a|b
alternation (a or b)
\1 \k<name>
backreference
(?=abc) (?!abc)
lookahead / negative lookahead
(?<=abc) (?<!abc)
lookbehind / negative lookbehind
\n \t \r
newline / tab / carriage return
\. \* \\
escaped literal . * \

Runs entirely in your browser. Nothing is uploaded.

সত্যিকারের JavaScript-এ লাইভ regular expression টেস্ট করুন

এই ফ্রি regex tester আপনি টাইপ করার সাথে সাথেই প্রতিটি ম্যাচ হাইলাইট করে, আপনার ব্রাউজারের আসল JavaScript regex ইঞ্জিন ব্যবহার করে — তাই এখানে যা ম্যাচ হয়, তা ঠিক সেটাই যা আপনার ফ্রন্টএন্ড কোড বা Node.js-এ ম্যাচ হবে। ছয়টি flag (g, i, m, s, u, y)-এর যেকোনোটি টগল করুন, আর ভুল প্যাটার্ন থাকলে নীরবে ব্যর্থ হওয়ার বদলে ইঞ্জিনের প্রকৃত এরর মেসেজটি দেখানো হয়।

লাইভ হাইলাইটের নিচে পাবেন একটি সম্পূর্ণ ম্যাচ তালিকা — প্রতিটি ম্যাচ তার অবস্থানসহ এবং সমস্ত capture group, নম্বর ও নামযুক্ত উভয়ই — আর একটি replace প্যানেল যা আপনি টাইপ করার সাথে সাথে $1, $<name> এবং $& backreference দিয়ে প্রতিস্থাপনের প্রিভিউ দেখায়। প্যাটার্নটি কাজ করলে Copy as JavaScript-এ ক্লিক করে সরাসরি পেস্ট করার মতো কোড নিয়ে নিন।

regex101.com ও regexr.com-এর একটি ফোকাসড বিকল্প

regex101.com-এর মতো ভারী টুল JavaScript-এর পাশাপাশি PCRE, Python, Golang এবং .NET flavor সমর্থন করে — ইঞ্জিন তুলনা করার সময় এটি কাজে লাগে, কিন্তু শুধু একটি JS প্যাটার্ন ডিবাগ করতে চাইলে প্রায়ই তা প্রয়োজনের বেশি। regexr.com কমিউনিটি প্যাটার্ন এবং একটি রেফারেন্স গাইড দেয়। ম্যাচ ফলাফল থেকে replace প্রিভিউতে যেতে উভয়েই একাধিক ট্যাবের মধ্য দিয়ে যেতে হয়।

এই অনলাইন regex tester একটি পরিষ্কার স্ক্রিনে সেই তিনটি প্রশ্নের উত্তর দেয় যা প্রতিদিনের কাজে সবচেয়ে গুরুত্বপূর্ণ: এটি কি ম্যাচ করে, এটি কী capture করল, এবং replace কী তৈরি করে? কোনো flavor নির্বাচন নেই, কোনো অ্যাকাউন্ট নেই, কোনো আপলোড নেই। regexpal.com (যা শুধু হাইলাইট দেখায়) বা debuggex.com (যা ভিজ্যুয়াল রেলওয়ে ডায়াগ্রামে ফোকাস করে)-এর তুলনায় এই টুলে প্রতি ম্যাচে capture group নিষ্কাশন এবং backreference সমর্থনসহ লাইভ replace প্রিভিউ যোগ করা হয়েছে।

সাধারণ regex প্যাটার্ন, এক ক্লিকেই

বিল্ট-ইন লাইব্রেরি বাস্তবসম্মত নমুনা টেক্সটসহ পরীক্ষিত প্যাটার্ন বসিয়ে দেয়: email অ্যাড্রেস, URL, IPv4 অ্যাড্রেস, ISO date, ২৪-ঘণ্টার time, hex color, URL slug, আন্তর্জাতিক ফোন নম্বর, number (integer/float) এবং HTML tag। প্রতিটিই বৈধ ও অবৈধ উদাহরণসহ লোড হয়, যাতে আপনি ঠিক দেখতে পারেন প্যাটার্নের সীমানা কোথায়।

এগুলো শুরু করার বিন্দু, চূড়ান্ত সত্য নয় — এখানেই এগুলো সংশোধন করুন এবং হাইলাইট কীভাবে সাড়া দেয় দেখুন। নমুনাগুলোতে ইচ্ছাকৃতভাবে এজ কেস রাখা হয়েছে (যেমন IPv4-এর জন্য 999.999.1.1) যাতে আপনি শেখেন প্রতিটি প্যাটার্ন কী প্রত্যাখ্যান করে, শুধু কী গ্রহণ করে তা নয়। Stack Overflow থেকে একটি প্যাটার্ন কপি করে এটি আপনার এজ কেস সামলায় কিনা তা অনুমান করার চেয়ে এটি অনেক দ্রুত।

capture group, lookaround ও ছয়টি flag — সম্পূর্ণ সমর্থিত

আধুনিক JavaScript regex-এ শক্তিশালী ফিচার আছে: named group (?<year>\d{4}), lookahead (?=…) এবং lookbehind (?<=…), u flag দিয়ে Unicode property escape, এবং y দিয়ে sticky ম্যাচিং। এই tester এর সবই সমর্থন করে, কারণ এটি নিজেই সেই JavaScript ইঞ্জিন। ম্যাচ প্যানেল প্রতিটি group প্রতি ম্যাচে আলাদা করে দেখায়, তাই নিষ্কাশনের লজিক এক নজরেই যাচাই করা যায়।

m flag-এর ডেমোটি সবার প্রিয়: এটি চালু থাকলে ^ এবং $ আপনার টেস্ট টেক্সটের প্রতিটি লাইনে anchor হয় — একটি লগ ফাইল পেস্ট করুন এবং দেখুন একটি ^ERROR প্যাটার্ন প্রতিটি ত্রুটিপূর্ণ লাইন আলোকিত করছে। . দিয়ে newline অক্ষর ম্যাচ করাতে s টগল করুন, কোনো ঘোরপথ ছাড়াই। এখানে আপনি যে ফলাফল দেখেন, তা আপনার কোড যা তৈরি করবে হুবহু তাই।

বিল্ট-ইন চিটশিট দিয়ে দ্রুত regex শিখুন

ভাঁজযোগ্য regex চিটশিট প্রতিদিন যে টোকেনগুলো আপনি ব্যবহার করবেন সেগুলো কভার করে — character class (\d \w \s), anchor (^ $ \b), quantifier (* + ? {n,m} এবং তাদের lazy রূপ), group, alternation, backreference এবং চারটি lookaround। পরীক্ষা করার সময় এটি খোলা রাখুন; একটি টোকেনের প্রভাব লাইভ হাইলাইট হতে দেখাই regex আসলে মনে রাখার সবচেয়ে দ্রুত উপায়।

সহজ দিয়ে শুরু করুন: একটি আক্ষরিক শব্দ ম্যাচ করুন, একটি character class যোগ করুন, তারপর একটি quantifier, তারপর একটি group। একটি regex playground-এ পাঁচ মিনিটের লাইভ ফিডব্যাক এক ঘণ্টা সিনট্যাক্স টেবিল পড়ার চেয়ে বেশি শেখায়। মোবাইলেও কাজ করে — লেআউট ছোট স্ক্রিনের জন্য মানিয়ে নেয়, তাই কোনো অ্যাপ ইনস্টল ছাড়াই iPhone বা Android-এ প্যাটার্ন ডিবাগ করতে পারবেন।

NFA বনাম DFA: backtracking কেন থাকে ও কীভাবে ক্ষতি করতে পারে

প্রায় প্রতিটি প্রোগ্রামিং ভাষার regex ইঞ্জিন — JavaScript, Python, Ruby, Java, PHP — একটি Non-deterministic Finite Automaton (NFA)-এর উপর তৈরি। একটি NFA প্রতিটি বিকল্প ক্রমানুসারে চেষ্টা করে, কোথায় ছিল তা মনে রাখে যাতে একটি শাখা ব্যর্থ হলে backtrack করে আরেকটি পথ চেষ্টা করতে পারে। এই পদ্ধতিই backreference এবং lookahead-এর মতো ফিচার সম্ভব করে: একটি Deterministic Finite Automaton (DFA) — যা awk এবং egrep-এর মতো টুল ব্যবহার করে — লিনিয়ার-টাইম ম্যাচিংয়ের নিশ্চয়তা দিতে পারে কিন্তু এই গঠনগুলো সমর্থন করতে পারে না, কারণ এটি আগের পছন্দের স্মৃতি ছাড়াই প্রতিটি অক্ষর ঠিক একবার প্রক্রিয়া করে।

NFA পদ্ধতির খরচ হলো catastrophic backtracking। ক্লাসিক উদাহরণটি হলো aaaaab-এর মতো একটি স্ট্রিংয়ে প্রয়োগ করা (a+)+ প্যাটার্ন। ভেতরের group কোনো ম্যাচ নেই এই সিদ্ধান্তে পৌঁছানোর আগে সূচকীয় সংখ্যক উপায়ে ভেতরের ম্যাচগুলো ভাগ করতে পারে, ফলে n দৈর্ঘ্যের একটি স্ট্রিংয়ের জন্য ইঞ্জিন 2ⁿ পথ অন্বেষণ করে। এটিই ReDoS (Regular Expression Denial of Service) আক্রমণের প্রক্রিয়া: একটি দুর্বল প্যাটার্ন দিয়ে ব্যবহারকারীর ইনপুট যাচাই করা একটি সার্ভার মাত্র কয়েকশো অক্ষরের সযত্নে তৈরি একটি স্ট্রিং দিয়ে জমে যেতে পারে। সমাধান হলো অস্পষ্টতা দূর করা — যেখানে সমর্থিত সেখানে atomic group বা possessive quantifier ব্যবহার করুন, একই অক্ষরের উপর নেস্টেড quantifier এড়িয়ে চলুন, এবং ইঞ্জিনকে একটি নির্দিষ্ট থামার বিন্দু দিতে negated character class পছন্দ করুন (যেমন কমার আগে .*?-এর বদলে [^,]*)।

আপনার প্যাটার্নকে ইচ্ছাকৃতভাবে ক্ষতিকর ইনপুটের বিরুদ্ধে পরীক্ষা করা এই tester-এ সহজ: আপনার প্যাটার্ন যা প্রত্যাখ্যান করার জন্য ডিজাইন করা, তেমন পুনরাবৃত্ত অক্ষরের একটি দীর্ঘ স্ট্রিং পেস্ট করুন, ইঞ্জিন আটকে গেলে আপনার ব্রাউজার DevTools-এ একক-অক্ষর stepping-এ যান, তারপর প্রত্যাখ্যান তাৎক্ষণিক না হওয়া পর্যন্ত refactor করুন। এখানে সমস্যাটি ধরা পড়তে মিলিসেকেন্ড খরচ হয়; প্রোডাকশনে ধরা পড়লে একটি আউটেজ খরচ হতে পারে।

lookahead ও lookbehind: প্রসঙ্গসহ ম্যাচ, কিছুই consume নয়

lookaround assertion আপনাকে একটি ম্যাচে শর্ত জুড়তে দেয়, অথচ ইঞ্জিন যা consume করে তাতে চারপাশের টেক্সট অন্তর্ভুক্ত করে না। একটি positive lookahead (?=...) বলে ‘বর্তমান অবস্থানের পরে অবশ্যই এটি থাকতে হবে’; একটি negative lookahead (?!...) বলে ‘অবশ্যই এটি থাকতে পারবে না’। তাদের প্রতিচ্ছবি, positive lookbehind (?<=...) এবং negative lookbehind (?<!...), ম্যাচের আগে যা আসে তার উপর একই শর্ত আরোপ করে। যেহেতু lookaround zero-width — এরা একটি শর্ত নিশ্চিত করে কিন্তু কার্সার এগোয় না — তাই প্রসঙ্গ দেখে ম্যাচ করবেন কিনা ঠিক করতে চাইলে অথচ সেই প্রসঙ্গ capture বা consume করতে না চাইলে এরা আদর্শ।

দুটি বাস্তব ব্যবহার কেন এরা অপরিহার্য তা দেখায়। পাসওয়ার্ড যাচাইয়ে প্রায়ই দরকার হয় একটি স্ট্রিংয়ে অন্তত একটি অঙ্ক এবং অন্তত একটি অক্ষর থাকা। প্রতিটি সমন্বয় গণনা করার বদলে, আপনি শুরুতে anchor করা দুটি আলাদা lookahead লেখেন: ^(?=.*\d)(?=.*[A-Za-z]).+$ — ইঞ্জিন বাকি ম্যাচে যাওয়ার আগে position zero-তে উভয় শর্ত পরীক্ষা করে। দাম নিষ্কাশন lookbehind দেখায়: ‘€12.99’ এবং ‘$4.50’-এর মতো টেক্সট থেকে মুদ্রার চিহ্ন capture না করেই সংখ্যা টানতে, (?<=[$€£])\d+\.\d{2} ব্যবহার করুন। চিহ্নটি উপস্থিত থাকা দরকার কিন্তু match() যা ফেরত দেয় তাতে তা অন্তর্ভুক্ত হয় না।

JavaScript-এর V8 ইঞ্জিন Chrome 62 (২০১৭) থেকে lookbehind সমর্থন করছে, তাই যেকোনো আধুনিক ব্রাউজার বা বর্তমান Node.js সংস্করণে এগুলো নিরাপদে ব্যবহার করা যায়। একটি গুরুত্বপূর্ণ সূক্ষ্মতা: একটি lookbehind-এর ভেতরে প্যাটার্ন ডান-থেকে-বাম ম্যাচ হয়, যার মানে কিছু জটিল প্যাটার্ন অপ্রত্যাশিতভাবে আচরণ করে — বিশেষত পরিবর্তনশীল-দৈর্ঘ্যের lookbehind চমকপ্রদ ফলাফল দিতে পারে। আপনার প্যাটার্নটি এখানে পেস্ট করুন এবং প্রতিটি ম্যাচের start/end index পরীক্ষা করে যাচাই করুন কার্সার অবস্থান আপনার ইচ্ছামতো আচরণ করছে কিনা।

named capture group ও non-capturing group

ডিফল্টভাবে, একটি প্যাটার্নের প্রতিটি বন্ধনী জোড়া একটি numbered capture group — প্রথম খোলা বন্ধনী group 1, দ্বিতীয়টি group 2, ইত্যাদি। ছোট প্যাটার্নে এটি ঠিকঠাক কাজ করে কিন্তু প্যাটার্ন বড় হওয়ার মুহূর্তেই ভঙ্গুর হয়ে ওঠে: শুরুর কাছে একটি নতুন group ঢোকান, আর আপনার replacement স্ট্রিংয়ের প্রতিটি $2 রেফারেন্স একঘর সরে যায়। named capture group এটি সমাধান করে। JavaScript এবং বেশিরভাগ PCRE-সঙ্গতিপূর্ণ ভাষায় আপনি (?<name>...) লেখেন; Python-এ লেখেন (?P<name>...)। captured মানটি তখন position নয়, নাম দিয়ে অ্যাক্সেসযোগ্য: JavaScript-এ match.groups.year বা Python-এ match.group('year')(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})-এর মতো একটি date প্যাটার্ন প্রতিটি group-এর উদ্দেশ্য স্ব-নথিভুক্ত করে তোলে, প্যাটার্ন refactor-এ downstream কোড না ভেঙে টিকে থাকে, এবং replacement-এ $<year> হিসেবে capture রেফারেন্স করতে দেয়।

যখন কাঠামো বা alternation-এর জন্য grouping দরকার কিন্তু ম্যাচ করা টেক্সট capture করার আগ্রহ নেই, তখন একটি non-capturing group (?:...) ব্যবহার করুন। ম্যাচিংয়ের দিক থেকে এটি একটি capturing group-এর মতোই আচরণ করে কিন্তু ম্যাচ array-তে কোনো slot বরাদ্দ করে না, যা আপনার group নম্বরিং পরিষ্কার রাখে এবং প্রতি ম্যাচে ইঞ্জিনের সামান্য মেমরি বাঁচায়। (?:https?|ftp)://-এর মতো একটি প্যাটার্ন capture তালিকা দূষিত না করেই protocol বিকল্পগুলো group করে। মোটামুটি নিয়ম হিসেবে: precedence বা alternation-এর জন্য group করার সময় (?:...) ব্যবহার করুন এবং মান নিষ্কাশনের ইচ্ছা থাকলে (?<name>...) ব্যবহার করুন — সাদামাটা (...) শুধু তখনই রাখুন যখন একটি একবারের replacement-এ দ্রুত backreference-এর জন্য group-টি নম্বরযুক্ত দরকার।

এই tester-এর ম্যাচ প্যানেল প্রতি ম্যাচে প্রতিটি named ও numbered group তালিকাভুক্ত করে, যা আপনার নিষ্কাশন লজিক যাচাই করা সহজ করে তোলে। একটি group যদি undefined দেখায়, তবে হয় যে শাখাটিতে এটি ছিল সেটি ম্যাচে অংশ নেয়নি (alternation প্যাটার্নে এটি স্বাভাবিক ফলাফল) অথবা আপনি ভুলবশত একটি capturing group যেখানে দরকার সেখানে একটি non-capturing group ব্যবহার করেছেন। কোডে প্যাটার্ন চূড়ান্ত করার আগে উভয় অবস্থাই এখানে তাৎক্ষণিকভাবে দৃশ্যমান।

জেনে রাখার মতো সাধারণ ব্যবহারিক প্যাটার্ন

কিছু প্যাটার্ন প্রায় প্রতিটি কোডবেসে দেখা যায়, এবং এগুলো কেন এভাবে লেখা হয় তা বোঝা সিনট্যাক্স মুখস্থ করার মতোই গুরুত্বপূর্ণ। Email একটি প্রতারণামূলকভাবে কঠিন সমস্যার আদর্শ উদাহরণ: RFC 5321-এর পূর্ণ ব্যাকরণ local part-এ +, উদ্ধৃতি চিহ্ন, এমনকি স্পেসের মতো অক্ষর অনুমোদন করে, যার মানে সত্যিকারের সঙ্গতিপূর্ণ একটি regex শত শত অক্ষর দীর্ঘ হবে এবং তবুও এজ কেসে ব্যর্থ হবে। ব্যবহারিক সমাধান হলো ঢিলেঢালাভাবে যাচাই করা — ^[^\s@]+@[^\s@]+\.[^\s@]+$ — এবং একটি প্রকৃত বার্তা পাঠিয়ে ডেলিভারি নিশ্চিত করা। একটি UUID (version 4) নির্ভরযোগ্যভাবে ম্যাচ করা যায় [0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12} দিয়ে (case-insensitive flag বাঞ্ছনীয়)। 2024-06-15-এর মতো একটি ISO 8601 date ব্যবহার করে \d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]) — প্রতিটি অংশের alternation কোনো parser ছাড়াই ক্যালেন্ডার-সম্ভাব্য পরিসর নিশ্চিত করে।

একটি URL slug — একটি ওয়েব অ্যাড্রেসের ছোট হাতের হাইফেনযুক্ত স্ট্রিং — সবচেয়ে সরল নির্ভরযোগ্য প্যাটার্নগুলোর একটি: ^[a-z0-9]+(?:-[a-z0-9]+)*$। একটি IPv4 অ্যাড্রেস সাধারণত escaped ডট দিয়ে যুক্ত (?:25[0-5]|2[0-4]\d|[01]?\d\d?)-এর চারটি group হিসেবে লেখা হয়; প্রতিটি octet-এর alternation সেই 0–255 পরিসর নিশ্চিত করে যা একটি সরল \d{1,3} পারে না। ফোন নম্বর এমন একটি ক্ষেত্র যেখানে regex ভুল প্রাথমিক টুল: নম্বরের ফরম্যাট দেশভেদে এত ভিন্ন যে একটি একক আন্তর্জাতিক প্যাটার্ন অব্যবস্থাপনাযোগ্য হয়ে পড়ে। প্রস্তাবিত পদ্ধতি হলো [^\d+] দিয়ে সমস্ত অ-অঙ্ক অক্ষর সরিয়ে ফেলা, তারপর কোডে দৈর্ঘ্য ও দেশের prefix যাচাই করা। ক্রেডিট কার্ড নম্বর JavaScript-এ Luhn algorithm দিয়ে checksum-যাচাই করা যায় — একটি regex অঙ্কের সংখ্যা ও ব্যবধান নিশ্চিত করতে পারে কিন্তু Luhn যোগফল যাচাই করতে পারে না, তাই ইনপুট পরিষ্কার করতে একটি regex এবং সত্যতা যাচাই করতে একটি ছোট ফাংশন ব্যবহার করুন।

এই প্যাটার্নগুলো আত্মস্থ করা মূল্যবান — মুখস্থ regex দ্রুত টাইপ হয় বলে নয়, বরং প্রতিটির গঠন বোঝা — email regex কেন পূর্ণ RFC সঙ্গতি ছেড়ে দেয়, IPv4 regex কেন সরল \d{1,3}-এর বদলে alternation ব্যবহার করে — regex কখন সঠিক টুল বনাম কখন একটি যথাযথ parser বা লাইব্রেরি ফাংশন ভালো কাজ করবে সে সম্পর্কে আপনার সহজাত বোধ শাণিত করে। বিল্ট-ইন লাইব্রেরি থেকে এদের যেকোনোটি লোড করুন, তারপর এজ-কেস ইনপুট দিয়ে ইচ্ছাকৃতভাবে সেগুলো ভাঙুন যাতে ঠিক দেখতে পান প্রতিটি প্যাটার্নের সীমানা কোথায়।

Frequently asked questions

regex tester কী?

একটি regex tester হলো একটি ইন্টারঅ্যাক্টিভ টুল যেখানে আপনি একটি regular expression এবং কিছু নমুনা টেক্সট টাইপ করেন, আর এটি তাৎক্ষণিকভাবে প্রতিটি ম্যাচ হাইলাইট করে। এই tester capture-group-এর মান দেখায় — নম্বর ও নামযুক্ত — ছয়টি JavaScript flag (g, i, m, s, u, y) সমর্থন করে, backreference সহ একটি লাইভ replace প্রিভিউ, একটি সাধারণ-প্যাটার্ন লাইব্রেরি এবং একটি সম্পূর্ণ চিটশিট দেয়। কোডে বসানোর আগে আপনি প্যাটার্ন ডিবাগ ও যাচাই করতে পারেন, তাও কিছু ইনস্টল বা অ্যাকাউন্ট তৈরি না করেই।

এই regex tester regex101.com ও regexr.com-এর সাথে কীভাবে তুলনীয়?

regex101.com ও regexr.com চমৎকার কিন্তু ঘন মনে হতে পারে — একাধিক flavor, একটি পূর্ণ ডিবাগার, কুইজ, কমিউনিটি প্যাটার্ন। এই tester বিশেষভাবে JavaScript ইঞ্জিনে ফোকাস করে এবং প্রতিদিন যে তিনটি প্রশ্ন সবচেয়ে গুরুত্বপূর্ণ তার উত্তর দেয়: এটি কি ম্যাচ করে, এটি কী capture করল, এবং replace কী তৈরি করে? এটি তাৎক্ষণিকভাবে লোড হয়, আপনার কাজ স্থানীয়ভাবে সংরক্ষণ করে, সম্পূর্ণভাবে আপনার ব্রাউজারে চলে, এবং একটি URL-এনকোডেড লিংকের মাধ্যমে প্যাটার্ন শেয়ার করে — কোনো টুলেই অ্যাকাউন্ট লাগে না। PCRE, Python ও Golang flavor সমর্থনকারী regex101-এর বিপরীতে, এটি আপনার ব্রাউজারের নেটিভ JavaScript ইঞ্জিন চালায়, তাই ফলাফল হুবহু।

এটি কি regexpal.com বা debuggex.com থেকে আলাদা?

হ্যাঁ। Regexpal সরল হাইলাইট দেয় কিন্তু capture group ব্রেকডাউন বা replace প্রিভিউ নেই। Debuggex একটি ভিজ্যুয়াল রেলওয়ে ডায়াগ্রাম যোগ করে কিন্তু সাধারণ-প্যাটার্ন লাইব্রেরি নেই। এই tester প্রতি ম্যাচে capture-group নিষ্কাশন, $1/$<name>/$& backreference সমর্থনসহ একটি লাইভ replace প্যানেল, এবং বাস্তবসম্মত নমুনা টেক্সটসহ একটি বিল্ট-ইন প্যাটার্ন লাইব্রেরি যোগ করে — সবই আসল JavaScript ইঞ্জিন চালিয়ে, যাতে ফলাফল আপনার কোড যা তৈরি করে তার সাথে হুবহু মেলে। সবকিছু অফলাইনে কাজ করে, কোনো আপলোড দরকার নেই।

regex মানে কী?

Regex হলো ‘regular expression’-এর সংক্ষিপ্ত রূপ — এমন অক্ষরের একটি স্ট্রিং যা একটি সার্চ প্যাটার্ন সংজ্ঞায়িত করে। প্রায় প্রতিটি প্রোগ্রামিং ভাষা ও টেক্সট এডিটরে টেক্সটে ম্যাচিং, নিষ্কাশন, যাচাই এবং ফাইন্ড-অ্যান্ড-রিপ্লেস কাজে regex ব্যবহৃত হয়। শব্দটি ১৯৫০-এর দশক ও গণিতবিদ Stephen Cole Kleene পর্যন্ত পৌঁছায়, কিন্তু ব্যবহারিক regex ব্যবহার ১৯৮০-এর দশকে Perl ভাষার সাথে বিস্ফোরিত হয়।

JavaScript-এ কীভাবে একটি regular expression টেস্ট করব?

JavaScript-এ আপনার কাছে বেশ কয়েকটি বিকল্প আছে: true/false পরীক্ষার জন্য regex.test(str), ম্যাচ করা টেক্সট পেতে str.match(regex), group বিবরণসহ সব ম্যাচের জন্য str.matchAll(regex), বা এক এক করে ম্যাচ iterate করতে regex.exec(str)। আপনি টাইপ করার সাথে সাথেই এই tester এর সবটাই লাইভ চালায় — এবং ‘Copy as JavaScript’ বাটনটি আপনার প্যাটার্নের জন্য হুবহু কোড দেয়, আপনার প্রজেক্টে পেস্ট করার জন্য তৈরি।

regex-এ capture group কী?

বন্ধনী ( ) একটি capture group তৈরি করে যা তার ভেতরে যা ম্যাচ হয় তা সংরক্ষণ করে, $1, $2 ইত্যাদি হিসেবে পুনরুদ্ধারযোগ্য। (?<name>...) হিসেবে লেখা named group নম্বরের বদলে নাম দিয়ে capture রেফারেন্স করতে দেয়। capture group একটি ম্যাচের অংশ নিষ্কাশন করতে দেয় — যেমন একটি email অ্যাড্রেস থেকে username ও domain — বা replacement-এ সেগুলো পুনঃব্যবহার করতে দেয়। এই tester-এর ম্যাচ প্যানেল প্রতি ম্যাচে প্রতিটি group-এর মান তালিকাভুক্ত করে, যা প্রোডাকশন কোডে ব্যবহারের আগে আপনার নিষ্কাশন লজিক যাচাই করা সহজ করে।

regex flag g, i, m, s, u ও y-এর মানে কী?

g (global) প্রথমটিতে থেমে না গিয়ে সব ম্যাচ খুঁজে বের করে; i (ignoreCase) ম্যাচিংকে case-insensitive করে; m (multiline) ^ এবং $-কে পুরো স্ট্রিং নয়, প্রতিটি লাইনের শুরু ও শেষে ম্যাচ করায়; s (dotAll) ডটকে newline-ও ম্যাচ করায়; u (Unicode) পূর্ণ Unicode সমর্থন ও \p{Letter}-এর মতো property escape সক্ষম করে; y (sticky) ম্যাচকে lastIndex-এ anchor করে। এই tester-এ ছয়টি flag-ই এক ক্লিকে টগল করা যায়।

regex কি ডিফল্টভাবে case sensitive?

হ্যাঁ — /hello/ ‘hello’ ম্যাচ করে কিন্তু ‘Hello’ নয়। অক্ষরের case নির্বিশেষে প্যাটার্ন ম্যাচ করাতে i (ignoreCase) flag টগল করুন। এটি যাচাই লজিকে বাগের একটি সাধারণ উৎস — যেমন একটি email regex যা ‘User@Example.COM’ ম্যাচ করতে ব্যর্থ হয় কারণ i flag ভুলে যাওয়া হয়েছিল।

JavaScript-এ match, test ও exec-এর মধ্যে পার্থক্য কী?

test() একটি boolean ফেরত দেয় — শুধু কিছু ম্যাচ হয় কিনা জানা দরকার হলে এটি ব্যবহার করুন। স্ট্রিংয়ে কল করা match() ম্যাচের একটি array বা null ফেরত দেয়। regex-এ কল করা exec() একবারে একটি বিস্তারিত ম্যাচ ফেরত দেয় এবং g flag সেট থাকলে স্ট্রিংয়ের মধ্য দিয়ে এগিয়ে যায়। matchAll() এক কলে পূর্ণ group বিবরণসহ প্রতিটি ম্যাচ ফেরত দেয় — নিষ্কাশনের কাজে সাধারণত এটিই সঠিক পছন্দ। এই tester ভেতরে matchAll চালায় এবং ম্যাচ প্যানেলে সব ফলাফল তুলে ধরে।

regex-এ lookahead বা lookbehind কী?

একটি lookahead (?=...) পরীক্ষা করে যে বর্তমান অবস্থানের পরে একটি প্যাটার্ন আছে, অক্ষর consume না করেই; একটি negative lookahead (?!...) উল্টোটা পরীক্ষা করে। Lookbehind (?<=...) এবং (?<!...) আগে যা আসে তার জন্য একই কাজ করে। ‘একটি সংখ্যা ম্যাচ করো যার পরে শতকরা চিহ্ন নেই’ বা ‘একটি শব্দ ম্যাচ করো যার আগে ডলার চিহ্ন আছে’-এর মতো শর্তে এগুলো কাজে লাগে। চারটি lookaround ধরনই এই tester-এ কাজ করে, কারণ আধুনিক JavaScript (V8) এগুলো সম্পূর্ণ সমর্থন করে।

regex কি সব প্রোগ্রামিং ভাষায় একই?

না — regex flavor উল্লেখযোগ্যভাবে ভিন্ন। JavaScript, PCRE (PHP ও Perl ব্যবহার করে), Python-এর re মডিউল, .NET, Java এবং Ruby প্রত্যেকে ভিন্ন সিনট্যাক্স ও ফিচার সমর্থন করে। PCRE possessive quantifier ও atomic group সমর্থন করে যা JavaScript-এ নেই; Python named group-এর জন্য (?<name>...)-এর বদলে (?P<name>...) ব্যবহার করে; .NET balancing group যোগ করে। এই tester আসল JavaScript/V8 ইঞ্জিন চালায়, তাই ফলাফল আপনার ফ্রন্টএন্ড কোড বা Node.js যা তৈরি করবে তার সাথে হুবহু মেলে।

টেক্সট ফাইন্ড অ্যান্ড রিপ্লেস করতে regex কীভাবে ব্যবহার করব?

JavaScript-এ str.replace(/pattern/g, 'replacement') প্রতিটি ম্যাচ বদলে দেয়। captured group ঢোকাতে replacement স্ট্রিংয়ে $1 বা $<name> ব্যবহার করুন, এবং পুরো ম্যাচের জন্য $&। এই tester-এর Replace প্যানেল আপনি টাইপ করার সাথে সাথে ফলাফল লাইভ প্রিভিউ করে, তাই কোডে চূড়ান্ত করার আগে প্রতিস্থাপনটি দেখতে পাবেন। আরও জটিল রূপান্তরের জন্য replacement আর্গুমেন্ট হিসেবে একটি ফাংশনও ব্যবহার করতে পারেন — যেমন প্রতিটি ম্যাচ বড় হাতের করার মতো কাজে উপযোগী।

regex-এ \d, \w ও \s-এর মানে কী?

\d যেকোনো অঙ্ক (0–9) ম্যাচ করে, \w একটি word অক্ষর (অক্ষর, অঙ্ক বা underscore) ম্যাচ করে, এবং \s whitespace (স্পেস, tab, newline) ম্যাচ করে। এদের বড় হাতের রূপ \D, \W ও \S উল্টোটা ম্যাচ করে — যা কিছু \d, \w ও \s ম্যাচ করে না। বিল্ট-ইন চিটশিট এগুলো এবং অন্য প্রতিটি সাধারণ টোকেন উদাহরণসহ তালিকাভুক্ত করে। বেশিরভাগ বাস্তব প্যাটার্নের গাঁথুনি হলো character class।

আমার regex কেন খুব বেশি ম্যাচ করছে (greedy matching)?

* এবং +-এর মতো quantifier ডিফল্টভাবে greedy — কিছু ফেরত দেওয়ার আগে যতটা সম্ভব টেক্সট ধরে নেয়। এদের lazy (.*?) করতে ? যোগ করুন, যা এদের বদলে যতটা সম্ভব কম ধরতে বাধ্য করে। আরেকটি বিকল্প হলো একটি নির্দিষ্ট delimiter-এ থামতে [^"]*-এর মতো একটি negated character class ব্যবহার করা। আপনার টেক্সট এই tester-এ পেস্ট করুন এবং greedy বনাম lazy পার্থক্যটি পাশাপাশি হাইলাইট হতে দেখুন — কী ঘটছে তা বোঝার এটিই দ্রুততম উপায়।

এই regex tester কি ফ্রি, এবং আমি কি একটি প্যাটার্ন শেয়ার করতে পারি?

ফ্রি, বিজ্ঞাপন নেই, সাইনআপ নেই। ‘Copy share link’ আপনার প্যাটার্ন, flag এবং টেস্ট টেক্সট URL-এ এনকোড করে, যাতে একজন সহকর্মী আপনি যা দেখছেন ঠিক তাই খোলে — কোনো প্রান্তেই অ্যাকাউন্ট লাগে না। আপনার কাজ আপনার ব্রাউজারে স্থানীয়ভাবে অটো-সেভও হয়, তাই ফিরে এলে তা সেখানেই থাকে। প্যাটার্ন স্থায়ীভাবে সংরক্ষণ ও শেয়ার করতে লগইন দাবি করা regex101-এর বিপরীতে, এই টুল আপনাকে তাৎক্ষণিকভাবে একটি শেয়ারযোগ্য URL দেয়।

নতুন

URL এনকোডার / ডিকোডার

টেক্সট পার্সেন্ট-এনকোড বা ডিকোড করুন এবং query string পার্স করুন — সব আপনার ব্রাউজারে।

ডেভেলপার
নতুন

HTML এনটিটি এনকোডার / ডিকোডার

ঐচ্ছিক সংখ্যাগত এনকোডিং সহ HTML এনটিটি escape ও unescape করুন।

ডেভেলপার
নতুন

Cron এক্সপ্রেশন বিল্ডার

একটি Cron সময়সূচি সহজ ভাষায় ব্যাখ্যা করুন এবং পরবর্তী রান সময় প্রিভিউ করুন।

ডেভেলপার
নতুন

HTML মিনিফায়ার

কমেন্ট মুছে ও হোয়াইটস্পেস সংকুচিত করে HTML কমপ্রেস করুন।

ডেভেলপার
নতুন

CSS মিনিফায়ার

কমেন্ট ও অপ্রয়োজনীয় হোয়াইটস্পেস সরিয়ে CSS ছোট করুন।

ডেভেলপার
নতুন

JSON Escape / Unescape

কাঁচা টেক্সটকে JSON-নিরাপদ স্ট্রিংয়ে escape করুন এবং আবার unescape করুন।

ডেভেলপার