<snapdata remixID="9306587"><project name="Regular Expressions" app="Snap! 5.4, http://snap.berkeley.edu" version="1"><notes>This is a simple Regular Expression interface, allowing you to utilize the powerful pattern matching capabilities of JavaScript!&#xD;&#xD;Reference:&#xD;https://www.w3schools.com/js/js_regexp.asp</notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAABxklEQVR4nO3XsY0aURhG0e2KhAAiCCelsEE0wEwj0wdNEJE8p7YsNlr5yrvnSC//giv9eh8DQh/1AH42AZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZISICkBkhIgKQGSEiApAZIS4BvLsozb7TYej0c95VsT4BvP53NcLpcxTdPY7XZjnucxz/N4vV71tG9FgJ/Ytm0cj8cxTdMf73Q6jXVdx7qu9cT/ngA/sW3bOBwOfwV4Pp/HsiwC/AICfOP3E7zf78c8z+N6vTrBX0yAb9zvd5+Qf0CApARISoCkBEhKgKQESEqApARISoCkBEhKgKQESEqApARISoCkBEhKgKQESEqApARISoCkBEhKgKQESEqApARISoCkBEhKgKQESEqApARISoCkBEhKgKQESEqApARISoCkBEhKgKQESEqApARISoCkBEhKgKQESEqApARISoCkBEhKgKQESEqApARISoCkfgFv9q+PXBsquwAAAABJRU5ErkJggg==</thumbnail><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" codify="false" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAACtUlEQVR4nO3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Bo3+AAF/RMkcAAAAAElFTkSuQmCC</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="Sprite" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="8"><costumes><list struct="atomic" id="9"></list></costumes><sounds><list struct="atomic" id="10"></list></sounds><blocks></blocks><variables></variables><scripts><script x="10" y="10"><block s="receiveGo"></block><block s="doDeclareVariables"><list><l>my string</l><l>pattern</l></list></block><block s="doSetVar"><l>my string</l><l>hello world! I am a very cool string!</l></block><block s="doSetVar"><l>pattern</l><custom-block s="regular expression %br $- contents: %code %br $- flags: %mult%txt"><l>(\w)(\w*)</l><list><custom-block s="flag %mlt"><l>match all</l></custom-block></list></custom-block><comment w="412" collapsed="false">Creating a new regular expression, matching a letter, then any words that come after it</comment></block><block s="doSayFor"><custom-block s="join %mult%mlt by %mlt"><custom-block s="regular expression $match %br $- string: %mlt %br $- pattern: %n"><block var="my string"/><block var="pattern"/></custom-block><l>, </l></custom-block><l>4</l><comment w="142" collapsed="false">Show all the matches for this pattern</comment></block><block s="doSayFor"><custom-block s="join %mult%mlt by %mlt"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="join %mult%mlt by %mlt"><block var="list"/><l>, </l></custom-block></autolambda><list><l>list</l></list></block><custom-block s="regular expression $match $all %br $- string: %mlt %br $- pattern: %n"><block var="my string"/><block var="pattern"/></custom-block></block><l>&#xD;&#xD;</l></custom-block><l>4</l><comment w="245" collapsed="false">This block lets us get the individual groups that we matched with our pattern&#xD;&#xD;These were the first letter, and the rest of the word</comment></block><block s="doSayFor"><custom-block s="regular expression $search %br $- string: %mlt %br $- pattern: %n"><block var="my string"/><custom-block s="regular expression %br $- contents: %code %br $- flags: %mult%txt"><l>[!?,.-;]</l><list></list></custom-block></custom-block><l>4</l><comment w="284" collapsed="false">Here, we are finding where the first punctuation character is</comment></block><block s="doSayFor"><block s="reportLetter"><custom-block s="regular expression $search %br $- string: %mlt %br $- pattern: %n"><block var="my string"/><custom-block s="regular expression %br $- contents: %code %br $- flags: %mult%txt"><l>[!?,.-;]</l><list></list></custom-block></custom-block><block var="my string"/></block><l>4</l><comment w="147" collapsed="false">Aha, this is indeed where it is!</comment></block><block s="doSayFor"><custom-block s="regular expression $replace %br $- string: %mlt %br $- pattern: %n %br $- replacement: %mlt"><block var="my string"/><block var="pattern"/><l>woof</l></custom-block><l>4</l><comment w="183" collapsed="false">Let&apos;s turn our sentence into something our dogs can understand by replacing occurrences of the pattern with &quot;woof&quot;</comment></block><block s="doSayFor"><custom-block s="regular expression $replace %br $- string: %mlt %br $- pattern: %n %br $- replacement: %mlt"><block var="my string"/><block var="pattern"/><l>$2$1</l></custom-block><l>4</l><comment w="166" collapsed="false">This time, we put the first letter of each word at its end instead of its beginning</comment></block></script></scripts></sprite></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="flag %&apos;flag&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mlt" readonly="true">match all<options>case-insensitive&#xD;match all&#xD;dotall&#xD;use unicode&#xD;multi-line</options></input></inputs><script><block s="doReport"><block var="flag"/></block></script></block-definition><block-definition s="regular expression $nl $- contents: %&apos;expr&apos; $nl $- flags: %&apos;flags&apos;" type="reporter" category="operators"><comment w="189" collapsed="false">Creates a new Regular Expression</comment><header></header><code></code><translations></translations><inputs><input type="%code">\w+</input><input type="%mult%txt" readonly="true"><options>case-insensitive&#xD;match all&#xD;multi-line&#xD;. accepts newlines&#xD;use unicode</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>exp</l><l>flags</l></list><l>let flagchain = "";&#xD;for (flag of flags.contents) {&#xD;    switch (flag) {&#xD;        case "case-insensitive":&#xD;            flagchain += "i";&#xD;            break;&#xD;        case "match all":&#xD;            flagchain += "g";&#xD;            break;&#xD;        case "dotall":&#xD;            flagchain += "s";&#xD;            break;&#xD;        case "use unicode":&#xD;            flagchain += "u";&#xD;            break;&#xD;        case "multi-line":&#xD;            flagchain += "m";&#xD;            break;&#xD;    }&#xD;}&#xD;return new RegExp(exp, flagchain);</l></block><list><block var="expr"/><block var="flags"/></list></block></block></script></block-definition><block-definition s="regular expression $match $nl $- string: %&apos;str&apos; $nl $- pattern: %&apos;pat&apos;" type="reporter" category="operators"><comment w="226" collapsed="false">Matches the occurrence of a pattern in a string</comment><header></header><code></code><translations></translations><inputs><input type="%mlt"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>str</l><l>pat</l></list><l>return new List(str.match(pat));</l></block><list><block var="str"/><block var="pat"/></list></block></block></script></block-definition><block-definition s="regular expression $match $all $nl $- string: %&apos;str&apos; $nl $- pattern: %&apos;pat&apos;" type="reporter" category="operators"><comment w="273" collapsed="false">Matches the occurrence of a pattern in a string&#xD;This time, all groups are accounted for in global matches</comment><header></header><code></code><translations></translations><inputs><input type="%mlt"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>str</l><l>pat</l></list><l>let arr = Array.from(str.matchAll(pat)); &#xD;for (i in arr) {&#xD;    arr[i] = new List(arr[i]);&#xD;}&#xD;return new List(arr);</l></block><list><block var="str"/><block var="pat"/></list></block></block></script></block-definition><block-definition s="regular expression $search $nl $- string: %&apos;str&apos; $nl $- pattern: %&apos;pat&apos;" type="reporter" category="operators"><comment w="226" collapsed="false">Searches for where a pattern occurs in a string</comment><header></header><code></code><translations></translations><inputs><input type="%mlt"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>str</l><l>pat</l></list><l>return str.search(pat) + 1;</l></block><list><block var="str"/><block var="pat"/></list></block></block></script></block-definition><block-definition s="regular expression $replace $nl $- string: %&apos;str&apos; $nl $- pattern: %&apos;pat&apos; $nl $- replacement: %&apos;rstr&apos;" type="reporter" category="operators"><comment w="274" collapsed="false">Replace one or more occurrences of a pattern in a string</comment><header></header><code></code><translations></translations><inputs><input type="%mlt"></input><input type="%n"></input><input type="%mlt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>str</l><l>pat</l><l>rstr</l></list><l>return str.replace(pat, rstr);</l></block><list><block var="str"/><block var="pat"/><block var="rstr"/></list></block></block></script></block-definition><block-definition s="join %&apos;words&apos; by %&apos;delim&apos;" type="reporter" category="operators"><comment w="181" collapsed="false">Joins a list of items by a delimiter</comment><header></header><code></code><translations></translations><inputs><input type="%mult%mlt"></input><input type="%mlt">,<options>space= &#xD;comma with space=, &#xD;comma=,</options></input></inputs><script><block s="doReport"><block s="reportCombine"><block var="words"/><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><block var="#1"/><block var="delim"/><block var="#2"/></list></block></autolambda><list><l>#1</l><l>#2</l></list></block></block></block></script></block-definition></blocks><variables></variables></project><media name="Regular Expressions" app="Snap! 5.4, http://snap.berkeley.edu" version="1"></media></snapdata>