टेम्पलेट शाब्दिक की अद्भुत दुनिया के लिए धन्यवाद , अब आप ईएस 6 में बड़े, मल्टी-लाइन, अच्छी तरह से टिप्पणी की जा सकती हैं, और यहां तक कि शब्दार्थ नेगेस भी लिख सकते हैं ।
//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
}
}
उद्धृत स्ट्रिंग के सफल कैप्चरिंग पर ध्यान दें।
मैंने इसे क्रोम और फ़ायरफ़ॉक्स पर परीक्षण किया, एक इलाज का काम करता है!
यदि आप उत्सुक हैं कि मैं क्या कर रहा था , और इसका प्रदर्शन देख सकते हैं ।
हालांकि यह केवल क्रोम पर काम करता है, क्योंकि फ़ायरफ़ॉक्स बैकरेफेरेंस या नामित समूहों का समर्थन नहीं करता है। तो ध्यान दें कि इस उत्तर में दिए गए उदाहरण वास्तव में एक न्युरेटेड संस्करण है और अवैध तारों को स्वीकार करने में आसानी से धोखा हो सकता है।
/\S+@\S+\.\S+/
?