রেগেক্স টেস্টার
ডেভম্যাচ হাইলাইটিং এবং ক্যাপচার গ্রুপ সহ JavaScript রেগুলার এক্সপ্রেশন পরীক্ষা করুন।
এই পৃষ্ঠায়
রেগেক্স টেস্টার কী?#
একটি রেগুলার এক্সপ্রেশন হলো টেক্সটে প্যাটার্ন বর্ণনা করার জন্য একটি কমপ্যাক্ট সংকেত: “ইমেইলের মতো দেখায় এমন সবকিছু”, “প্রতিটি লাইনের তৃতীয় শব্দ”, “উদ্ধৃতির ভেতরে না থাকা সমস্ত সংখ্যা”। প্যাটার্নটি লেখা কেবল অর্ধেক কাজ — বাকি অর্ধেক হলো দেখা যে এটি আসলে কী মেলে, আপনার মতো টেক্সটে, আগে আপনি এটি প্রোডাকশন কোডে পেস্ট করেন। একটি রেগেক্স টেস্টার হলো সেই পৃষ্ঠা যেখানে আপনি তা করেন।
এই টুলটি আপনার প্যাটার্নটি আপনার নমুনা টেক্সটের বিপরীতে রিয়েল টাইমে চালায়, প্রতিটি ম্যাচকে স্থানে হাইলাইট করে, এবং প্রতিটি ক্যাপচার গ্রুপ আলাদাভাবে তালিকাভুক্ত করে যাতে আপনি নিশ্চিত করতে পারেন কেবল যে এটি ম্যাচ করেছে নয়, কী ক্যাপচার করেছে। এটি JavaScript রেগেক্স ইঞ্জিন ব্যবহার করে (একই ইঞ্জিন আপনার ব্রাউজার এবং Node ইতিমধ্যে বলে), তাই এখানকার আচরণ আপনার কোড যা করবে তার সাথে মেলে।
কীভাবে ব্যবহার করবেন#
- উপরে-বামে দুটি
/চিহ্নের মধ্যে প্যাটার্ন লিখুন। আপনি স্ল্যাশগুলো নিজে টাইপ করেন না — সেগুলো আপনার জন্য আঁকা, যেভাবে কোডে একটি লিটারাল রেগেক্স লেখা হয়। - প্যাটার্নের ডানদিকের ছোট বক্সে ফ্ল্যাগ লিখুন। যেগুলো আপনি সবচেয়ে বেশি ব্যবহার করবেন:
g— কেবল প্রথমটি নয়, সব ম্যাচ খুঁজে বের করুন।i— কেস-সংবেদনশীল নয়।m—^এবং$পুরো স্ট্রিংয়ের বদলে প্রতিটি লাইনের শুরু এবং শেষে মেলায়।s—.নতুন লাইনের সাথেও মেলাতে দিন।u— প্যাটার্নটিকে Unicode হিসেবে বিবেচনা করুন (ইমোজি এবং অ-ASCII-এর জন্য গুরুত্বপূর্ণ)।
- নিচের বক্সে আপনার পরীক্ষামূলক টেক্সট পেস্ট করুন। এমন টেক্সট ব্যবহার করুন যা সত্যিই আপনার প্রকৃত ইনপুটের মতো — পরিপাটি উদাহরণে কাজ করে এমন একটি প্যাটার্ন প্রায়শই অগোছালো ডেটায় ভুল আচরণ করে।
- ডানদিকের হাইলাইট করা পূর্বরূপ পড়ুন: প্রতিটি ম্যাচ প্রসঙ্গে, স্থানে দেখানো হয়। এর নিচে, প্রতিটি ক্যাপচার গ্রুপ তার সূচক, ক্যাপচার করা টেক্সট, এবং অফসেট সহ তালিকাভুক্ত করা হয় যেখানে এটি পাওয়া গিয়েছিল।
প্রধান বৈশিষ্ট্য#
- লাইভ হাইলাইটিং। প্রতিটি ম্যাচ মূল টেক্সটের বিপরীতে স্থানে রেন্ডার করা হয়, তাই আপনি একনজরে সীমানা দেখতে পান — সেই অসুবিধাজনক ক্ষেত্রে সহ যেখানে একটি ম্যাচ সাদাসিধে জুড়ে চলে।
- প্রতি-গ্রুপ ক্যাপচার তালিকা। গ্রুপ সূচক, ম্যাচ করা সাবস্ট্রিং, এবং অক্ষর অফসেট, প্রতিটি ক্যাপচারে একটি সারি। অপরিহার্য যখন একটি প্যাটার্নের তিন বা চারটি গ্রুপ আছে এবং আপনার জানা প্রয়োজন কোনটি কোনটি।
- একসাথে একাধিক ফ্ল্যাগ।
g,i,m,s,uঅবাধে সংযুক্ত করুন (উদাহরণস্বরূপgiuগ্লোবাল, কেস-সংবেদনশীল নয়, Unicode-সচেতন)। - ReDoS পূর্ব-সতর্কতা। কিছু প্যাটার্ন — সাধারণত
(a+)+-এর মতো নেস্টেড কোয়ান্টিফায়ার — তৈরি করা ইনপুটে সূচকীয়ভাবে বিস্ফোরিত হতে পারে। স্ট্যাটাস লাইন ম্যাচ করার সাথে সাথে প্যাটার্ন নিজেই চিহ্নিত করে, আপনাকে সরল করতে উৎসাহিত করে আগে এটি কখনো শত্রু ইনপুটের সম্মুখীন হয়। চেকটি আপনার প্যাটার্নের আকৃতি পড়ে; এটি পরিমাপ করে না শেষ রান কতক্ষণ নিয়েছে, এবং একটি সত্যিকারের বিপর্যয়কর প্যাটার্ন এখনও ট্যাব লক করতে পারে — তাই সতর্কবার্তা মনোযোগ দিন। - ডিজাইন দ্বারা সীমাবদ্ধ। ইনপুট 250,000 অক্ষরে সীমাবদ্ধ এবং ম্যাচ তালিকা কয়েক হাজার এন্ট্রির পরে বন্ধ বাড়ে (ক্যাপচার প্যানেল প্রথম ২০০টি দেখায়), তাই একটি বিশাল ফাইলের আকস্মিক পেস্ট নীরবে চিরকাল চলতে পারে না।
- কোনো রাউন্ড-ট্রিপ নেই। প্যাটার্ন এবং টেক্সট আপনার ব্রাউজারে প্রক্রিয়া করা হয়; কিছুই কোথাও পাঠানো হয় না।
ব্যবহারের উদাহরণ#
ধরুন আপনার কাছে লগ লাইনের একটি তালিকা আছে এবং আপনি একটি HTTP ক্রিয়া দিয়ে শুরু হওয়া লাইনগুলো থেকে method এবং path টেনে নিতে চান। এই প্যাটার্নটি ব্যবহার করুন:
(\w+)\s+(/[\w/-]+)
ফ্ল্যাগ gm সহ, এবং এর বিপরীতে পরীক্ষা করুন:
GET /api/users
POST /api/login
DELETE /api/users/42
not a log line
PUT /api/items/3-qty
টুলটি প্রথম, দ্বিতীয়, তৃতীয় এবং পঞ্চম লাইনগুলো হাইলাইট করে (চতুর্থটি একটি শব্দ দিয়ে শুরু হয় না যার পরে একটি পথ আছে)। ক্যাপচার তালিকা প্রতিটি ম্যাচের জন্য, method এবং path আলাদাভাবে রিপোর্ট করে — তাই DELETE হলো গ্রুপ 1 এবং /api/users/42 হলো গ্রুপ 2, এবং আপনি নিশ্চিত করতে পারেন যে path গ্রুপটি সঠিকভাবে শেষ লাইনে শেষের -qty সেগমেন্ট অন্তর্ভুক্ত করেছে।
প্রশ্নোত্তর#
এটি কোন রেগেক্স ফ্লেভার ব্যবহার করে?#
JavaScript-এর বিল্ট-ইন ইঞ্জিন — একই ইঞ্জিন String.prototype.match, RegExp.prototype.exec, এবং Node-এর রেগেক্স লিটারাল দ্বারা ব্যবহৃত। এখানে কাজ করে এমন একটি প্যাটার্ন আপনার ফ্রন্টএন্ড কোড বা আপনার Node সার্ভারে অপরিবর্তিত কাজ করবে। এটি PCRE, RE2 বা Rust-এর রেগেক্স নয়; আপনি যদি একটি PHP বা Go কোডবেস থেকে একটি প্যাটার্ন কপি করেন, এটি নির্ভর করার আগে এখানে পরীক্ষা করুন।
টুলটি একটি সম্ভাব্য ReDoS সম্পর্কে সতর্ক করে। এর মানে কী?#
নির্দিষ্ট প্যাটার্নগুলোকে শত্রু ইনপুটে অনেক সময় ধরে চালানো যেতে পারে — ক্লাসিক উদাহরণ হলো (a+)+b যা a-গুলোর একটি স্ট্রিংয়ের বিপরীতে কোনো শেষের b ছাড়া ম্যাচ করা। আক্রমণকারীরা এটিকে কাজে লাগায় রেগেক্স-ভিত্তিক পরিষেবাগুলোকে অস্বীকার-অফ-সার্ভিস করতে। সতর্কবার্তাটি হলো আপনার প্যাটার্নের আকৃতির একটি স্ট্যাটিক পাঠ (নেস্টেড কোয়ান্টিফায়ার, ওভারল্যাপিং অল্টারনেশন); এটি এমন একটি প্যাটার্ন ম্যাচ তৈরি করার সাথে সাথে ফায়ার করে, শেষ রান কতক্ষণ নিয়েছে তার উপর ভিত্তি করে নয়। আপনি এটি দেখলে, প্যাটার্নটি সরল করুন: নেস্টেড কোয়ান্টিফায়ার সরান, এটি অ্যাঙ্কর করুন, বা আপনার টার্গেট ইঞ্জিন সমর্থন করলে অ্যাটমিক গ্রুপ ব্যবহার করুন।
আমার প্যাটার্ন কেন কেবল একবার মেলে?#
আপনি সম্ভবত g ফ্ল্যানটি মিস করছেন। g ছাড়া, একটি JavaScript রেগেক্স প্রথম ম্যাচে থেমে যায়। প্রতিটি অ-ওভারল্যাপিং ঘটনা খুঁজে পেতে g যোগ করুন।
. কি নতুন লাইন মেলায়?#
ডিফল্টভাবে নয় — . একটি লাইন টার্মিনেটর ছাড়া যেকোনো অক্ষর মেলায়। আপনি যদি চান . নতুন লাইন জুড়ে থাকুক তবে s ফ্ল্যাগ (কখনো “dotall” বলা হয়) যোগ করুন, যা কার্যকর যখন লাইন ব্রেক অন্তর্ভুক্ত এমন ব্লক ম্যাচ করার সময়।