দেখছেন: বাংলা ইংরেজিতে দেখুন

Regex টেস্টার

JavaScript রেগুলার এক্সপ্রেশন লাইভ পরীক্ষা করুন। হাইলাইট করা ম্যাচ এবং ক্যাপচার গ্রুপ দেখুন।

/ /

হাইলাইট করা ম্যাচ

 

ম্যাচ ও গ্রুপ

  1. উপরের ফিল্ডে আপনার regex প্যাটার্ন টাইপ করুন (স্ল্যাশে মোড়ানোর দরকার নেই)।
  2. আপনি যে ফ্ল্যাগ চান সেগুলি টগল করুন: সব ম্যাচের জন্য g, কেস-ইনসেনসিটিভের জন্য i, ইত্যাদি।
  3. টেস্ট স্ট্রিং বাক্সে টেস্ট স্ট্রিং পেস্ট বা টাইপ করুন।
  4. রিয়েল-টাইমে ম্যাচ হাইলাইট হতে দেখুন; নীচের টেবিলে ক্যাপচার করা গ্রুপ পরিদর্শন করুন।
এটি কী করে?

এই টেস্টার আপনার প্যাটার্নকে ব্রাউজারের নেটিভ RegExp ইঞ্জিন ব্যবহার করে টেস্ট স্ট্রিং-এর বিরুদ্ধে চালায় — Node.js, Deno এবং প্রতিটি ব্রাউজার যেটি ব্যবহার করে সেটি একই। ম্যাচ ইনলাইনে হাইলাইট করা হয়। সংখ্যাযুক্ত এবং নামযুক্ত ক্যাপচার গ্রুপ একটি টেবিলে বের করা হয় যাতে আপনি দেখতে পারেন প্রতিটি প্যারেন্থেটিকাল সেগমেন্ট ঠিক কী ধরেছে।

উদাহরণ

প্যাটার্ন (flag g সহ):

\b(\w+)@(\w+\.\w+)\b

টেস্ট স্ট্রিং:

Contact us at [email protected] or [email protected]. Not an email: foo@bar (no TLD).

ম্যাচ:

1  [email protected]        $1: hello    $2: example.com
2  [email protected]   $1: support  $2: happycoder.dev

foo@bar ম্যাচ হয় না কারণ \w+\.\w+ ডোমেনে একটি ডট প্রয়োজন।

আমার regex কেন ম্যাচ করছে না?

  • g ফ্ল্যাগ ভুলে গেছেন। এটি ছাড়া, শুধু প্রথম ম্যাচ ফেরত আসে। /cat/.exec("cat cat") একটি "cat" পায়; /cat/g দুটোই পায়।
  • আনএস্কেপড মেটাক্যারেক্টার। example.com examplexcom-ও ম্যাচ করে কারণ . যেকোনো অক্ষরের সাথে মেলে। এটি এস্কেপ করুন: example\.com।
  • গ্রীডি ম্যাচিং অতিরিক্ত খায়। <a><b>-এ <.*> পুরো জিনিসটি ধরে। প্রথম >-এ থামতে lazy <.*?> বা <[^>]*> ব্যবহার করুন।
  • শব্দ সীমানা বিভ্রান্তি। \b একটি শব্দ-চর এবং একটি অ-শব্দ-চর-এর মধ্যে একটি অবস্থান। \bfoo-bar\b এর মতো প্যাটার্ন ব্যর্থ হয় কারণ - মাঝখানে ইতিমধ্যে একটি অ-শব্দ সীমানা।
  • কেস মিলছে না। [a-z]+ Hello মেলাবে না। i ফ্ল্যাগ যোগ করুন বা [A-Za-z]+ অন্তর্ভুক্ত করুন।
  • মাল্টিলাইন ^ / $। m ফ্ল্যাগ ছাড়া তারা শুধু পুরো স্ট্রিং-এ নোঙ্গর করে, প্রতিটি লাইনে নয়। লগ লাইন স্ক্যান করছেন তাহলে m চালু করুন।
প্রায়শই জিজ্ঞাসিত প্রশ্ন

এই টেস্টার কোন regex ফ্লেভার ব্যবহার করে?

JavaScript (ECMAScript) regex, ব্রাউজারের অন্তর্নির্মিত RegExp ইঞ্জিনের মাধ্যমে। এটি PCRE (PHP, Perl), Python-এর re মডিউল এবং POSIX regex থেকে বেশ কয়েক ভাবে আলাদা: রিকার্সন নেই, পসেসিভ কোয়ান্টিফায়ার নেই, নামযুক্ত গ্রুপগুলি (?P<name>...)-এর বদলে (?<name>...) ব্যবহার করে, এবং \d-এর মতো ক্যারেক্টার-ক্লাস শর্টহ্যান্ড u ফ্ল্যাগ না যোগ করলে শুধুমাত্র ASCII।

এটি কি lookbehind সমর্থন করে?

হ্যাঁ। (?<=foo)bar এবং (?<!foo)bar-এর মতো lookbehind assertion ES2018-এ যোগ করা হয়েছিল এবং বর্তমানের সমস্ত Chromium, Firefox এবং Safari বিল্ডে সমর্থিত। আপনি যদি প্রোডাকশনে খুব পুরনো ব্রাউজার টার্গেট করছেন, তাদের উপর নির্ভর করার আগে caniuse চেক করুন — কিন্তু এই টেস্টার নিজেই সেগুলি ভালোভাবে চালায়।

g, i, m, s এবং u ফ্ল্যাগের অর্থ কী?

g শুধু প্রথমটির পরিবর্তে প্রতিটি ম্যাচ খুঁজে পায়। i ম্যাচিংকে কেস-ইনসেনসিটিভ করে। m ^ এবং $-কে পুরো স্ট্রিং-এর পরিবর্তে প্রতিটি লাইনের শুরু এবং শেষ ম্যাচ করায়। s (dotall) .-কে নিউলাইন ম্যাচ করায়। u সম্পূর্ণ Unicode পরিচালনা এবং কঠোর এস্কেপ পার্সিং সক্ষম করে। শুধুমাত্র আপনার দরকারী ফ্ল্যাগ বেছে নিন — বিশেষ করে g কতগুলি ম্যাচ পাবেন তা পরিবর্তন করে।

আমার গ্রীডি কোয়ান্টিফায়ার কেন অনেক বেশি ম্যাচ করছে?

*, +, এবং {n,}-এর মতো কোয়ান্টিফায়ার ডিফল্টরূপে গ্রীডি — তারা যতটা সম্ভব ম্যাচ করে এবং বাকি প্যাটার্ন ব্যর্থ হলেই কেবল ফেরত দেয়। সেগুলিকে lazy করতে একটি ? যোগ করুন: .*? যতটা সম্ভব কম ম্যাচ করে। একাধিক ট্যাগে খাওয়া <a>.*</a>-এর সাধারণ সমাধান: <a>.*?</a> বা নেগেটেড ক্লাস <a>[^<]*</a> ব্যবহার করুন।

আমি কীভাবে প্যাটার্ন বা প্রতিস্থাপনে পরবর্তীতে একটি ক্যাপচার করা গ্রুপকে রেফারেন্স করব?

প্যাটার্নের ভিতরে, পূর্বের গ্রুপ যে টেক্সট ধরেছে তার একই টেক্সট ম্যাচ করতে \1, \2 ইত্যাদি ব্যবহার করুন — (\w+)\s+\1 পুনরাবৃত্তি শব্দ ম্যাচ করে। একটি প্রতিস্থাপন স্ট্রিংয়ে (এই লাইভ টেস্টারে সমর্থিত নয়, কিন্তু String.replace-এ) $1, $2 ব্যবহার করুন। নামযুক্ত গ্রুপ প্যাটার্নের ভিতরে \k<name> এবং প্রতিস্থাপনে $<name> ব্যবহার করে।

আমার regex কেন ভেঙে যায় যখন প্যাটার্নে একটি ডট, স্ল্যাশ বা প্যারেন্থেসিস থাকে?

সেগুলি regex মেটাক্যারেক্টার। তাদের আক্ষরিকভাবে ম্যাচ করতে, একটি ব্যাকস্ল্যাশ দিয়ে এস্কেপ করুন: ডটের জন্য \., স্ল্যাশের জন্য \/ (new RegExp স্ট্রিং-এ ঐচ্ছিক, /.../ literals-এর মধ্যে প্রয়োজন), প্যারেন্থেসিসের জন্য \( এবং \)। বিশেষ চর হল . * + ? ^ $ { } ( ) | [ ] \ — আক্ষরিক টেক্সট হিসেবে এগুলির যেকোনোটির এস্কেপিং প্রয়োজন।

আমি এখানে যে regex বা টেস্ট টেক্সট টাইপ করি তা কি আপনি সংরক্ষণ করেন?

না। আপনি যে প্যাটার্ন লেখেন বা যে টেক্সট সেগুলির বিরুদ্ধে পরীক্ষা করেন তা আমরা সংরক্ষণ করি না। আপনি যা টাইপ করেন তা ট্যাব বন্ধ বা রিফ্রেশ করার মুহূর্তে ফেলে দেওয়া হয় — কোনো লগ নেই, আপনি কী মিলিয়েছেন তার আমাদের পক্ষে কোনো রেকর্ড নেই। অতিরিক্ত আশ্বাস চাইলে, আপনার ব্রাউজারের ডেভেলপার টুলস নিশ্চিত করবে।