যে সরবরাহ করে:
- আপনি জানেন যে আপনি আপনার রিজেক্সেপে কী করেন;
- প্যাটার্ন গঠনে আপনার কাছে অনেকগুলি রেগেক্স টুকরা রয়েছে এবং তারা একই পতাকা ব্যবহার করবে;
- আপনার ছোট প্যাটার্ন খণ্ডগুলিকে একটি অ্যারেতে আলাদা করা আপনার পক্ষে আরও পঠনযোগ্য বলে মনে হয়;
- আপনি পরবর্তী দেব বা নিজের জন্য পরে প্রতিটি অংশে মন্তব্য করতে সক্ষম হতে চান;
- আপনি
/this/g
বরং আপনার রেজেক্সের চেয়ে দৃশ্যত সরল করতে পছন্দ করেনnew RegExp('this', 'g')
;
- আপনার প্রথম থেকেই এক টুকরো টুকরো করে রাখার চেয়ে অতিরিক্ত পদক্ষেপে রেজেক্সটি একত্রিত করা ঠিক আছে;
তাহলে আপনি এইভাবে লিখতে পছন্দ করতে পারেন:
var regexParts =
[
/\b(\d+|null)\b/,// Some comments.
/\b(true|false)\b/,
/\b(new|getElementsBy(?:Tag|Class|)Name|arguments|getElementById|if|else|do|null|return|case|default|function|typeof|undefined|instanceof|this|document|window|while|for|switch|in|break|continue|length|var|(?:clear|set)(?:Timeout|Interval))(?=\W)/,
/(\$|jQuery)/,
/many more patterns/
],
regexString = regexParts.map(function(x){return x.source}).join('|'),
regexPattern = new RegExp(regexString, 'g');
তারপরে আপনি এর মতো কিছু করতে পারেন:
string.replace(regexPattern, function()
{
var m = arguments,
Class = '';
switch(true)
{
// Numbers and 'null'.
case (Boolean)(m[1]):
m = m[1];
Class = 'number';
break;
// True or False.
case (Boolean)(m[2]):
m = m[2];
Class = 'bool';
break;
// True or False.
case (Boolean)(m[3]):
m = m[3];
Class = 'keyword';
break;
// $ or 'jQuery'.
case (Boolean)(m[4]):
m = m[4];
Class = 'dollar';
break;
// More cases...
}
return '<span class="' + Class + '">' + m + '</span>';
})
আমার বিশেষ ক্ষেত্রে (একটি কোড-আয়না সদৃশ সম্পাদক), একটি এক্সপ্রেশন মোড়ানোর জন্য এইচটিএমএল ট্যাগের সাথে প্রতিবার প্রতিস্থাপনের মতো অনুসরণ করার মতো অনেকগুলি প্রতিস্থাপনের পরিবর্তে একটি বড় রেইগেক্স সম্পাদন করা অনেক সহজ, এইচটিএমএল ট্যাগ নিজেই প্রভাবিত না করে লক্ষ্য নির্ধারণ করা কঠিন (এবং দুর্ভাগ্যক্রমে জাভাস্ক্রিপ্টে সমর্থিত নয় এমন ভাল চেহারা ব্যতীত ):
.replace(/(\b\d+|null\b)/g, '<span class="number">$1</span>')
.replace(/(\btrue|false\b)/g, '<span class="bool">$1</span>')
.replace(/\b(new|getElementsBy(?:Tag|Class|)Name|arguments|getElementById|if|else|do|null|return|case|default|function|typeof|undefined|instanceof|this|document|window|while|for|switch|in|break|continue|var|(?:clear|set)(?:Timeout|Interval))(?=\W)/g, '<span class="keyword">$1</span>')
.replace(/\$/g, '<span class="dollar">$</span>')
.replace(/([\[\](){}.:;,+\-?=])/g, '<span class="ponctuation">$1</span>')
let regexSegment1 = String.raw`\s*hello\s*`