টেম্পলেট আক্ষরিকের বিস্ময়কর জগতকে ধন্যবাদ আপনি এখন ES6-তে বড়, বহু-লাইন, ভাল-মন্তব্য করেছেন, এমনকি শব্দার্থিকভাবে নেস্টেড রেজেক্সগুলিও লিখতে পারেন।
//build regexes without worrying about
// - double-backslashing
// - adding whitespace for readability
// - adding in comments
let clean = (piece) => (piece
.replace(/((^|\n)(?:[^\/\\]|\/[^*\/]|\\.)*?)\s*\/\*(?:[^*]|\*[^\/])*(\*\/|)/g, '$1')
.replace(/((^|\n)(?:[^\/\\]|\/[^\/]|\\.)*?)\s*\/\/[^\n]*/g, '$1')
.replace(/\n\s*/g, '')
);
window.regex = ({raw}, ...interpolations) => (
new RegExp(interpolations.reduce(
(regex, insert, index) => (regex + insert + clean(raw[index + 1])),
clean(raw[0])
))
);
এটি ব্যবহার করে আপনি এখন এটির মতো রেজিڪس লিখতে পারেন:
let re = regex`I'm a special regex{3} //with a comment!`;
আউটপুট
/I'm a special regex{3}/
বা মাল্টলাইন কি?
'123hello'
.match(regex`
//so this is a regex
//here I am matching some numbers
(\d+)
//Oh! See how I didn't need to double backslash that \d?
([a-z]{1,3}) /*note to self, this is group #2*/
`)
[2]
আউটপুটস hel
, ঝরঝরে!
"আসলে যদি আমার কোনও নতুন লাইন অনুসন্ধান করার দরকার হয়?", ভাল তবে \n
নির্বোধ ব্যবহার করুন !
আমার ফায়ারফক্স এবং ক্রোমে কাজ করা।
ঠিক আছে, "কীভাবে কিছুটা জটিল জটিল?"
অবশ্যই, আমি কাজ করছি এমন জেএস পার্সারকে বিলম্বকারী কোনও অবজেক্টের এখানে :
regex`^\s*
(
//closing the object
(\})|
//starting from open or comma you can...
(?:[,{]\s*)(?:
//have a rest operator
(\.\.\.)
|
//have a property key
(
//a non-negative integer
\b\d+\b
|
//any unencapsulated string of the following
\b[A-Za-z$_][\w$]*\b
|
//a quoted string
//this is #5!
("|')(?:
//that contains any non-escape, non-quote character
(?!\5|\\).
|
//or any escape sequence
(?:\\.)
//finished by the quote
)*\5
)
//after a property key, we can go inside
\s*(:|)
|
\s*(?={)
)
)
((?:
//after closing we expect either
// - the parent's comma/close,
// - or the end of the string
\s*(?:[,}\]=]|$)
|
//after the rest operator we expect the close
\s*\}
|
//after diving into a key we expect that object to open
\s*[{[:]
|
//otherwise we saw only a key, we now expect a comma or close
\s*[,}{]
).*)
$`
এটি আউটপুট /^\s*((\})|(?:[,{]\s*)(?:(\.\.\.)|(\b\d+\b|\b[A-Za-z$_][\w$]*\b|("|')(?:(?!\5|\\).|(?:\\.))*\5)\s*(:|)|\s*(?={)))((?:\s*(?:[,}\]=]|$)|\s*\}|\s*[{[:]|\s*[,}{]).*)$/
আর একটু ডেমো দিয়ে চালাচ্ছেন?
let input = '{why, hello, there, "you huge \\"", 17, {big,smelly}}';
for (
let parsed;
parsed = input.match(r);
input = parsed[parsed.length - 1]
) console.log(parsed[1]);
সাফল্যের সাথে আউটপুটস
{why
, hello
, there
, "you huge \""
, 17
,
{big
,smelly
}
}
উদ্ধৃত স্ট্রিংয়ের সফল ক্যাপচারটি নোট করুন।
আমি এটি ক্রোম এবং ফায়ারফক্সে পরীক্ষা করেছি, একটি ট্রিট কাজ করে!
যদি জানতে আগ্রহী আপনি Checkout পারেন আমি কি করছেন , এবং তার বিক্ষোভের ।
যদিও এটি কেবল ক্রোমে কাজ করে, কারণ ফায়ারফক্স ব্যাকরিফারেন্স বা নামযুক্ত গোষ্ঠীগুলিকে সমর্থন করে না। সুতরাং নোট করুন যে এই উত্তরে প্রদত্ত উদাহরণটি আসলে একটি নিচু সংস্করণ এবং সহজেই অবৈধ স্ট্রিং গ্রহণে জালিয়াতি পেতে পারে।
/\S+@\S+\.\S+/
?