এখানে বেশিরভাগ এক্সপ্রেশন একক নির্দিষ্ট ব্যবহারের ক্ষেত্রে সমাধান করে।
এটি ঠিক আছে, তবে আমি একটি "সর্বদা কাজ করে" পদ্ধতির পছন্দ করি।
function regExpEscape(literal_string) {
return literal_string.replace(/[-[\]{}()*+!<=:?.\/\\^$|#\s,]/g, '\\$&');
}
এটি নিয়মিত অভিব্যক্তিতে নিম্নলিখিত যে কোনও ব্যবহারের জন্য একটি আক্ষরিক স্ট্রিং "পুরোপুরি পালাতে" সক্ষম হবে:
- একটি নিয়মিত প্রকাশে সন্নিবেশ। যেমন
new RegExp(regExpEscape(str))
- একটি অক্ষর শ্রেণিতে সন্নিবেশ। যেমন
new RegExp('[' + regExpEscape(str) + ']')
- পূর্ণসংখ্যা গণনা নির্দিষ্টকারীর মধ্যে সন্নিবেশ। যেমন
new RegExp('x{1,' + regExpEscape(str) + '}')
- নন-জাভাস্ক্রিপ্ট নিয়মিত এক্সপ্রেশন ইঞ্জিনগুলিতে কার্যকর করা।
বিশেষ চরিত্রগুলি আবৃত:
-
: একটি অক্ষর শ্রেণিতে একটি চরিত্রের সীমা তৈরি করে।
[
/ ]
: একটি অক্ষর শ্রেণীর শুরু / সমাপ্ত হয়।
{
/ }
: একটি সংখ্যার নির্দিষ্টকারীকে শুরু / শেষ করে।
(
/ )
: একটি গোষ্ঠী শুরু / শেষ হয়।
*
/ +
/?
: পুনরাবৃত্তির ধরণ নির্দিষ্ট করে।
.
: যে কোনও চরিত্রের সাথে মেলে।
\
: অক্ষরগুলি ছেড়ে যায় এবং সত্ত্বা শুরু করে।
^
: ম্যাচিং জোনটির সূচনা নির্দিষ্ট করে এবং একটি অক্ষর শ্রেণিতে ম্যাচটি উপেক্ষা করে।
$
: ম্যাচিং জোনের শেষ উল্লেখ করে।
|
: অল্টারনেশন নির্দিষ্ট করে।
#
: ফ্রি স্পেসিং মোডে মন্তব্য নির্দিষ্ট করে।
\s
: ফ্রি স্পেসিং মোডে উপেক্ষা করা হয়েছে।
,
: সংখ্যা নির্দিষ্টকরণে পৃথক করে মান।
/
: প্রকাশ বা সমাপ্তি প্রকাশ।
:
: বিশেষ গোষ্ঠী প্রকার এবং পার্ল-শৈলীর চরিত্রের শ্রেণীর অংশ সম্পূর্ণ করে।
!
: শূন্য-প্রস্থের গ্রুপটিকে নেগেট করে।
<
/ =
: শূন্য প্রস্থের গ্রুপ স্পেসিফিকেশনের অংশ।
মন্তব্য:
/
নিয়মিত প্রকাশের কোনও স্বাদে কঠোরভাবে প্রয়োজন হয় না। তবে কেউ (কাঁপুনি করা) ক্ষেত্রে সুরক্ষিত করে eval("/" + pattern + "/");
।
,
নিশ্চিত করে যে যদি স্ট্রিংটি সংখ্যার স্পেসিফায়ারে একটি পূর্ণসংখ্যা হিসাবে বোঝানো হয় তবে এটি নিঃশব্দে ভুল সংকলনের পরিবর্তে একটি RegExp সংকলন ত্রুটি ঘটায় properly
#
, এবং \s
জাভাস্ক্রিপ্টে পালানোর দরকার নেই, তবে অন্য অনেক স্বাদে করুন। নিয়মিত প্রকাশটি পরে অন্য কোনও প্রোগ্রামে প্রেরণ করা হয় তবে তারা এখানে পালিয়ে যায়।
আপনার যদি জাভা স্ক্রিপ্ট রেজেক্স ইঞ্জিন ক্ষমতার সম্ভাব্য সংযোজনগুলির বিরুদ্ধে নিয়মিত প্রকাশের ভবিষ্যত-প্রমাণের প্রয়োজন হয় তবে আমি আরও বিড়ম্বনা ব্যবহার করার পরামর্শ দিচ্ছি:
function regExpEscapeFuture(literal_string) {
return literal_string.replace(/[^A-Za-z0-9_]/g, '\\$&');
}
এই ফাংশনটি ভবিষ্যতের নিয়মিত প্রকাশের স্বাদে সিনট্যাক্সের জন্য স্পষ্টভাবে গ্যারান্টিযুক্ত গ্যারান্টিযুক্ত বাদে প্রতিটি চরিত্রকে ছাড়িয়ে যায়।
সত্যিকারের স্যানিটেশন-আগ্রহীদের জন্য, এই প্রান্তের বিষয়টি বিবেচনা করুন:
var s = '';
new RegExp('(choice1|choice2|' + regExpEscape(s) + ')');
এটি জাভাস্ক্রিপ্টে সূক্ষ্ম সংকলন করা উচিত , তবে অন্য কিছু স্বাদে হবে না। যদি অন্য কোনও গন্ধে যাওয়ার ইচ্ছা থাকে, তবে এর মতো নাল s === ''
কেসটি স্বাধীনভাবে যাচাই করা উচিত:
var s = '';
new RegExp('(choice1|choice2' + (s ? '|' + regExpEscape(s) : '') + ')');
RegExp.escape
যা বর্তমানে কাজ করা হয়েছে এবং যে কেউ মনে করে যে তাদের মূল্যবান ইনপুট রয়েছে তা অবদানের জন্য অত্যন্ত স্বাগত। কোর-জেএস এবং অন্যান্য পলিফিলগুলি এটি সরবরাহ করে।