Share
Embed
Regular expressions – my secret love
stefan judis
December 03, 2019
Transcript
57 slides
-
/^(Hello|Bonjour) dotJS!(.+)$/ Match a string that starts with "Hello" or
"Bonjour" followed by " dotJS!"... -
/^(Hello|Bonjour) dotJS!(.+)$/ Match a string that starts with "Hello" or
"Bonjour" followed by " dotJS!", capture more than one character... -
/^(Hello|Bonjour) dotJS!(.+)$/ Match a string that starts with "Hello" or
"Bonjour" followed by " dotJS!", capture more than one character until the end. -
/^(Hello|Bonjour) dotJS!(.+)$/ .exec( "Hello dotJS! How are you?" ) [
0: "Hello dotJS! How are you?", 1: "Hello", 2: " How are you?" ] -
/^(Hello|Bonjour) dotJS!(.+)$/ .exec( "Hello dotJS! How are you?" ) [
0: "Hello dotJS! How are you?", 1: "Hello", 2: " How are you doing?" ] -
/^(Hello|Bonjour) dotJS!(.+)$/ .exec( "Hello dotJS! How are you?" ) [
0: "Hello dotJS! How are you?", 1: "Hello", 2: " How are you?" ] -
/^(Hello|Bonjour) dotJS!(.+)$/ .exec( "Hello dotJS! How are you?" ) [
0: "Hello dotJS! How are you?", 1: "Hello", 2: " How are you?" ] -
/^(Hello|Bonjour) dotJS!(.+)$/ .exec( "Hello dotJS! How are you?" ) [
0: "Hello dotJS! How are you?", 1: "Hello", 2: " How are you?" ] -
/^(?:Hello|Bonjour) dotJS!(.+)$/ .exec( "Hello dotJS! How are you?" ) [
0: "Hello dotJS! How are you?", 1: " How are you?" ] -
/^(?:Hello|Bonjour) dotJS!(.+)$/ .exec( "Hello dotJS! How are you?" ) [
0: "Hello dotJS! How are you?", 1: " How are you?" ] (?: ...) – there are non-capturing groups in JavaScript -
/^(?:Hello|Bonjour) dotJS!(.+)$/ .exec( "Hello dotJS! How are you?" ) [
0: "Hello dotJS! How are you?", 1: " How are you?" ] -
/^(?:Hello|Bonjour) dotJS!(?<rest>.+)$/ .exec( "Hello dotJS! How are you?" ) [
0: "Hello dotJS! How are you?", 1: " How are you?", groups: { rest: " How are you?" } ] -
/^(?:Hello|Bonjour) dotJS!(?<rest>.+)$/ .exec( "Hello dotJS! How are you?" ) [
0: "Hello dotJS! How are you?", 1: " How are you?", groups: { rest: " How are you?" } ] -
/^(?:Hello|Bonjour) dotJS!(?<rest>.+)$/ .exec( "Hello dotJS! How are you?" ) [
0: "Hello dotJS! How are you doing?", 1: " How are you doing?", groups: { rest: " How are you?" } ] (?<name> ...) – there are named capture groups in JavaScript -
/^(?:Hello|Bonjour) dotJS!(?<rest>.+)$/ .exec( "Hello dotJS! How are you?" ) [
0: "Hello dotJS! How are you?", 1: " How are you doing?", groups: { rest: " How are you?" } ] -
/^(Bonjour) \1 dotJS!(?<rest>.+)$/ .exec( "Bonjour Bonjour dotJS! How are you?"
) [ 0: "Hello dotJS! How are you?", 1: "Bonjour" 2: " How are you?", groups: { rest: " How are you?" } ] -
/^(Bonjour) \1 dotJS!(?<rest>.+)$/ .exec( "Bonjour Bonjour dotJS! How are you?"
) [ 0: "Hello dotJS! How are you doing?", 1: "Bonjour" 2: " How are you?", groups: { rest: " How are you?" } ] \1, \2, ... – there are capture group back references in JavaScript -
/^(Bonjour) \1 dotJS!(?<rest>.+)$/ .exec( "Bonjour Bonjour dotJS! How are you?"
) [ 0: "Hello dotJS! How are you?", 1: "Bonjour" 2: " How are you?", groups: { rest: " How are you?" } ] -
/^(?:Bonjour) dotJS!(?<rest>.+) \k<rest>$/ .exec( "Bonjour dotJS! How are you? How
are you?" ) [ 0: "Bonjour dotJS! How are you? How are you?", 1: " How are you?", groups: { rest: " How are you?" } ] -
/^(?:Bonjour) dotJS!(?<rest>.+) \k<rest>$/ .exec( "Bonjour dotJS! How are you? How
are you?" ) [ 0: "Bonjour dotJS! How are you? How are you?", 1: " How are you?", groups: { rest: " How are you?" } ] \k<name> – there are named capture group back references in JavaScript -
/^(?:Bonjour) dotJS!(?<rest>.+)$/ .exec( "Bonjour dotJS! How are you?" ) [
0: "Bonjour dotJS! How are you?", 1: " How are you?", groups: { rest: " How are you?" } ] -
/^(?:Bonjour) dotJS!(?<rest>.+)$/s .exec( "Bonjour dotJS! How are\nyou?" ) [ 0:
"Bonjour dotJS! How are↵you?", 1: " How are↵you?", groups: { rest: " How are↵you?" } ] -
/^(?:Bonjour) dotJS!(?<rest>.+)$/s .exec( "Bonjour dotJS! How are\nyou?" ) [ 0:
"Bonjour dotJS! How are↵you?", 1: " How are↵you?", groups: { rest: " How are↵you?" } ] / .../s – the dotall flag really captures every character -
/^(?:Bonjour) dotJS!(?<rest>.+)\p{Emoji}$/su .exec( "Bonjour dotJS! How are\nyou?" ) [ 0:
"Bonjour dotJS! How are↵you?", 1: " How are↵you?", groups: { rest: " How are↵you?" } ] -
/^(?:Bonjour) dotJS!(?<rest>.+)\p{Math_Symbol}$/su .exec( "Bonjour dotJS! How are\nyou?⁼" ) [ 0:
"Bonjour dotJS! How are↵you⁼?", 1: " How are↵you?", groups: { rest: " How are↵you?" } ] -
/^(?:Bonjour) dotJS!(?<rest>.+)\p{Script=Greek}$/su .exec( "Bonjour dotJS! How are\nyou?μ" ) [ 0:
"Bonjour dotJS! How are↵youμ?", 1: " How are↵you?", groups: { rest: " How are↵you?" } ] -
/^(?:Bonjour) dotJS!(?<rest>.+)\p{Script=Greek}$/su .exec( "Bonjour dotJS! How are\nyou?μ" ) [ 0:
"Bonjour dotJS! How are↵youμ?", 1: " How are↵you?", groups: { rest: " How are↵you?" } ] p/{ ...} – unicode property escapes are a thing these days! -
Other exciting "new" features to check out lookahead and lookbehind
assertions String.prototype.matchAll -
Other exciting "new" features to check out lookahead and lookbehind
assertions String.prototype.matchAll string replacement patterns