সংখ্যা খুঁজার রেগুলার এক্সপ্রেশন: pattern:-?\d+(\.\d+)?
। যা আমরা পূর্বের টাস্কে করেছিলাম।
অপারেটর হল pattern:[-+*/]
. হাইফেন pattern:-
অবশ্যই ব্রাকেটের শুরুতে হতে হবে, কেননা মাঝে হলে এটি দ্বারা ক্যারাক্টারের রেঞ্জ বুঝায়, এখানে আমরা -
কে ক্যারাক্টার হিসেবে ব্যবহার করতে চায়।
স্ল্যাশ /
অবশ্যই জাভাস্ক্রিপ্টের রেগুলার এক্সপ্রেশনের মাঝে এস্কেপড pattern:/.../
হয়, এটি আমরা এটি পরে দেখব।
আমাদের খুঁজা লাগবে একটি সংখ্যা অতঃপর একটি গাণিতিক চিহ্ন এবং শেষে আরো একটি সংখ্যা এবং তাদের মাঝের অতিরিক্ত স্পেস।
সুতরাং রেগুলার এক্সপ্রেশনটি হবে: pattern:-?\d+(\.\d+)?\s*[-+*/]\s*-?\d+(\.\d+)?
।
এর ৩টি অংশ আছে, সাথে এটিও pattern:\s*
:
১. pattern:-?\d+(\.\d+)?
- প্রথম সংখ্যাটি।
২. pattern:[-+*/]
- গাণিতিক চিহ্নটি।
৩. pattern:-?\d+(\.\d+)?
- দ্বিতীয় সংখ্যাটি।
তাদের প্রত্যেককে রেজাল্ট অ্যারের আলাদা আলাদা উপাদান হিসেবে রাখতে প্যারান্টেসিস দ্বারা গ্রুপ করি: pattern:(-?\d+(\.\d+)?)\s*([-+*/])\s*(-?\d+(\.\d+)?)
।
যেমন:
let regexp = /(-?\d+(\.\d+)?)\s*([-+*\/])\s*(-?\d+(\.\d+)?)/;
alert( "1.2 + 12".match(regexp) );
রেজাল্টে:
result[0] == "1.2 + 12"
(সম্পূর্ন এক্সপ্রেশনটি)result[1] == "1.2"
(প্রথম গ্রুপ(-?\d+(\.\d+)?)
-- প্রথম সংখ্যাটি, দশমিক অংশটিসহ)result[2] == ".2"
(দ্বিতীয় গ্রুপ(\.\d+)?
-- প্রথম দশমিক অংশটি)result[3] == "+"
(তৃতীয় গ্রুপ([-+*\/])
-- গাণিতিক চিহ্নটি)result[4] == "12"
(চতুর্থ গ্রুপ(-?\d+(\.\d+)?)
-- দ্বিতীয় সংখ্যাটি)result[5] == undefined
(পঞ্চম গ্রুপ(\.\d+)?
-- দ্বিতীয় দশমিক অংশটি অনুপস্থিত, সুতরাং এটি undefined)
আমরা শুধু সংখ্যাগুলো এবং গাণিতিক চিহ্নটি চায়, সম্পূর্ন অংশটি বা দশমিক অংশটি চায় না, সুতরাং আমাদের রেজাল্টকে আরো কিছুটা "clean" করি।
সম্পূর্ন অংশটি যা অ্যারের প্রথম ইলিমেন্ট একে আমরা result.shift()
মেথডের সাহায্যে বাদ দিতে পারি।
যে গ্রুপগুলোতে দশমিক অংশ থাকে (২ এবং ৪ আইটেম) এই অংশের pattern:(.\d+)
শুরুতে pattern:?:
যোগ করে তাদের বাদ দিতে পারি: pattern:(?:\.\d+)?
।
সুতরাং সমাধানটি হবে:
function parse(expr) {
let regexp = /(-?\d+(?:\.\d+)?)\s*([-+*\/])\s*(-?\d+(?:\.\d+)?)/;
let result = expr.match(regexp);
if (!result) return [];
result.shift();
return result;
}
alert( parse("-1.23 * 3.45") ); // -1.23, *, 3.45