{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/javascript/packs/projects/regex_data.js","webpack:///./app/javascript/packs/projects/regex.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","challenges","description","strings","matches","solution","regex","flags","regexInput","document","getElementById","flagsInput","challengeName","challengeDescription","testStrings","challengeSelect","challenge","reReplace","string","re","polarity","colour","innerHTML","replace","RegExp","timesToCheck","icon","classList","remove","add","checkToTimes","checkMatch","match","every","j","reMatch","contains","handleInput","forEach","addEventListener","event","find","element","buildHTML","yesChecks","noChecks","innerText","insertAdjacentHTML","length","buildSelect"],"mappings":"aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,qBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,UAIjBlC,EAAoBA,EAAoBmC,EAAI,I,kCClFrD,sDAgMaC,EAAa,CA7KP,CACjBzB,KAAM,eACNU,MAAO,cACPgB,YAAa,+5BACbC,QAAS,CACP,CACE,gBACA,gBACA,gBAEF,CACE,aACA,kBAGJC,QAAS,CACP,CAAC,iBACD,CAAC,iBACD,CAAC,iBAEHC,SAAU,wBAGK,CACf7B,KAAM,uBACNU,MAAO,WACPgB,YAAa,yLACbC,QAAS,CACP,CACE,qBACA,6BACA,+BAEF,CACE,gBACA,6CAGJC,QAAS,CACP,CAAC,MAAO,MAAO,MAAO,OACtB,CAAC,QACD,CAAC,SAEHC,SAAU,wBAGI,CACd7B,KAAM,yBACNU,MAAO,UACPgB,YAAa,gOACbC,QAAS,CACP,CACE,YACA,oCACA,sDAEF,CACE,SACA,0BAGJC,QAAS,CACP,CAAC,aACD,CAAC,YACD,CAAC,UAAQ,kBAEXC,SAAU,8BAqDG,CACb7B,KAAM,0BACNU,MAAO,SACPgB,YAAa,0OACbC,QAAS,CACP,CACE,iBACA,6BACA,aACA,WAEF,CACE,MACA,cACA,QAGJC,QAAS,CACP,CAAC,OACD,CAAC,KAAM,OACP,CAAC,QACD,CAAC,QAEHC,SAAU,8BAKK,CACf7B,KAAM,cACNU,MAAO,WACPgB,YAAa,GACbC,QAAS,CACP,CACE,yBACA,4BACA,uCAEF,CACE,UACA,4CACA,4CAGJC,QAAS,CACL,CAAC,0BACD,CAAC,6BACD,CAAC,2BAELC,SAAU,mCAnGE,CACZ7B,KAAM,qBACNU,MAAO,QACPgB,YAAa,4JACbC,QAAS,CACP,CACE,OACA,OACA,UACA,+BAEF,CACE,QACA,MACA,KACA,SAGJC,QAAS,CACP,CAAC,OACD,CAAC,QACD,CAAC,QACD,CAAC,aAEHC,SAAU,kEAGE,CACZ7B,KAAM,gBACNU,MAAO,gBACPgB,YAAa,qNACbC,QAAS,CACP,CACE,YACA,YACA,UAEF,CACE,YACA,cAGJC,QAAS,CACP,CAAC,aACD,CAAC,aACD,CAAC,WAEHC,SAAU,iC,gCCvIZ,mBAEIC,EAAQ,GACRC,EAAQ,GAENC,EAAaC,SAASC,eAAe,SACrCC,EAAaF,SAASC,eAAe,SAErCE,EAAgBH,SAASC,eAAe,kBACxCG,EAAuBJ,SAASC,eAAe,yBAC/CI,EAAcL,SAASC,eAAe,gBACtCK,EAAkBN,SAASC,eAAe,oBAE5CM,EAAYf,aAAW,GAErBgB,EAAY,SAACC,EAAQjD,EAAGkD,EAAIC,GAChC,IAAMC,EAAsB,QAAbD,EAAqB,QAAU,MAC9CX,SAASC,eAAT,UAA2BU,EAA3B,YAAuCnD,IACpCqD,UAAYJ,EAAOK,QAAQJ,EAAf,uBAAmCE,EAAnC,oBACRE,QAAQ,IAAIC,OAAO,KAAM,KAAM,SAGlCC,EAAe,SAAAC,GACnBA,EAAKC,UAAUC,OAAO,mBACtBF,EAAKC,UAAUC,OAAO,WACtBF,EAAKC,UAAUE,IAAI,mBACnBH,EAAKC,UAAUE,IAAI,cAGfC,EAAe,SAAAJ,GACnBA,EAAKC,UAAUC,OAAO,mBACtBF,EAAKC,UAAUC,OAAO,aACtBF,EAAKC,UAAUE,IAAI,mBACnBH,EAAKC,UAAUE,IAAI,YAGfE,EAAa,SAAC9D,EAAG+D,GACrB,OAAc,OAAVA,GACShB,EAAUb,QAAQ,GAAGlC,GAAG+D,MAAMhB,EAAUX,UAEvC4B,OAAM,SAACf,EAAQgB,GAAO,OAAOhB,GAAUc,EAAME,OAGvDC,EAAU,SAACjB,EAAQjD,EAAGkD,EAAIC,GAC9B,IAAMY,EAAQd,EAAOc,MAAMb,GACrBO,EAAOjB,SAASC,eAAT,gBAAiCU,EAAjC,YAA6CnD,IAEzC,OAAbmD,EACY,OAAVY,GAAkBN,EAAKC,UAAUS,SAAS,mBAC5CX,EAAaC,GACM,OAAVM,GAAkBN,EAAKC,UAAUS,SAAS,oBACnDN,EAAaJ,GAGXK,EAAW9D,EAAG+D,IAAUN,EAAKC,UAAUS,SAAS,mBAClDX,EAAaC,IACHK,EAAW9D,EAAG+D,IAAUN,EAAKC,UAAUS,SAAS,oBAC1DN,EAAaJ,IAKbW,EAAc,WAClB,IAAMlB,EAAK,IAAIK,OAAOlB,EAAOC,GAE7BS,EAAUb,QAAQ,GAAGmC,SAAQ,SAACpB,EAAQjD,GACpCgD,EAAUC,EAAQjD,EAAGkD,EAAI,OACzBgB,EAAQjB,EAAQjD,EAAGkD,EAAI,UAGzBH,EAAUb,QAAQ,GAAGmC,SAAQ,SAACpB,EAAQjD,GACpCgD,EAAUC,EAAQjD,EAAGkD,EAAI,MACzBgB,EAAQjB,EAAQjD,EAAGkD,EAAI,UAI3BX,EAAW+B,iBAAiB,SAAS,SAACC,GACpClC,EAAQE,EAAWc,UACnBe,OAGF1B,EAAW4B,iBAAiB,SAAS,SAACC,GACpCjC,EAAQI,EAAWW,UACnBe,OAGFtB,EAAgBwB,iBAAiB,SAAS,SAACC,GACzCxB,EAAYf,aAAWwC,MAAK,SAAAC,GAAO,OAAIA,EAAQxD,OAAS6B,EAAgB7B,SACxEyD,OAGF,IAQMA,EAAY,WAChB,IAAIC,EAAY,GACZC,EAAW,GAEfjC,EAAcU,UAAYN,EAAUxC,KACpCqC,EAAqBS,UAAYN,EAAUd,YAC3CM,EAAWsC,UAAY,kBACvBnC,EAAWmC,UAAY,QAEvBhC,EAAYQ,UAAY,GAExBR,EAAYiC,mBAAmB,YAAa,yBAE5C/B,EAAUb,QAAQ,GAAGmC,SAAQ,SAACpB,EAAQjD,GACpC6C,EAAYiC,mBAAmB,YAA/B,uBAA4D9E,EAA5D,gCAAqF+C,EAAUb,QAAQ,GAAGlC,GAAGsD,QAAQ,IAAIC,OAAO,KAAM,KAAM,QAA5I,WACAoB,GAAS,2BAAwB3E,EAAxB,iDAGX6C,EAAYiC,mBAAmB,YAAaH,GAE5C9B,EAAYiC,mBAAmB,YAAa,+BAE5C/B,EAAUb,QAAQ,GAAGmC,SAAQ,SAACpB,EAAQjD,GACpC6C,EAAYiC,mBAAmB,YAA/B,sBAA2D9E,EAA3D,gCAAoF+C,EAAUb,QAAQ,GAAGlC,GAAzG,WACA4E,GAAQ,0BAAuB5E,EAAvB,iDAGV6C,EAAYiC,mBAAmB,YAAaF,IAG9CF,IAtCoB,WAClB,IAAK,IAAI1E,EAAI,EAAGA,EAAIgC,aAAW+C,OAAQ/E,GAAK,EAAG,CAC7C,IAAMiB,EAAQe,aAAWhC,GAAGiB,MACtBV,EAAOyB,aAAWhC,GAAGO,KAC3BuC,EAAgBgC,mBAAmB,YAAnC,yBAAkE7D,EAAlE,aAA4EV,EAA5E,eAmCJyE","file":"js/projects/regex-b9ae0d6da0a2e427524d.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 58);\n","const template = {\n name: \"Template\",\n value: \"value\",\n description: \"xxx\",\n strings: [\n [\n \"Test one\",\n \"Test two\"\n ],\n [\n \"Test three\"\n ]\n ],\n matches: [\n [\"Test\"],\n [\"Tes\"]\n ]\n};\n\nconst helloWorld = {\n name: \"Hello World!\",\n value: \"hello-world\",\n description: \"

Welcome to my Regex Challenges. So you've learnt the basics of regex somewhere like regexone.com and now you want a bit more practice? Great! That's where I was when I decided to build these challenges. They are not about straight-laced real-world use cases and best practices, instead they are for you to play and explore.

They are roughly ordered from easier to harder. You get a tick for each string when you get the described match(es), but that's not required to move on. Skip a challenge if you want, or stay on one and experiment some more. Note: this is built using the Javascript regular expression engine and .match().

First, let's refresh the basics. Here are three strings to match and two to avoid matching. Enter your expression and flags below.

\",\n strings: [\n [\n \"Hello, World!\",\n \"Hello, world?\",\n \"HELLO WORLD!\"\n ],\n [\n \"Hi, World!\",\n \"Hello, World.\"\n ]\n ],\n matches: [\n [\"Hello, World!\"],\n [\"Hello, world?\"],\n [\"HELLO WORLD!\"]\n ],\n solution: /hello,? world(!|\\?)/i\n};\n\nconst ordinals = {\n name: \"Second things second\",\n value: \"ordinals\",\n description: \"Match the ordinal numbers below when written with numerals. So, for example, the first string should have matches ['1st', '2nd', '3rd', '4th'] and the third should just match '10th'.\",\n strings: [\n [\n \"1st, 2nd, 3rd, 4th\",\n \"21ST ANNUAL REGEX FESTIVAL\",\n \"Tenth is also written 10th.\"\n ],\n [\n \"101 Kleene St\",\n \"My super secret password: 1starwarsmovie\"\n ]\n ],\n matches: [\n [\"1st\", \"2nd\", \"3rd\", \"4th\"],\n [\"21ST\"],\n [\"10th\"]\n ],\n solution: /\\d+(st|nd|rd|th)\\b/ig\n};\n\nconst catalan = {\n name: \"It's all Catalan to me\",\n value: \"catalan\",\n description: \"In this challenge, you have to match words which include letters not part of the ISO Basic Latin Alphabet (the 26 letters of the English alphabet). So the first string should match 'Català', the second 'Força', etc.\",\n strings: [\n [\n \"Català\",\n \"Força, equilibri, valor i seny\",\n \"L'any 2016 vam dir 'adéu' a molts diacrítics\"\n ],\n [\n \"Som-hi\",\n \"16 jutges d'un jutjat\"\n ]\n ],\n matches: [\n [\"Català\"],\n [\"Força\"],\n [\"adéu\", \"diacrítics\"]\n ],\n solution: /\\w*[àéíç]\\w*/gi\n};\n\nconst roman = {\n name: \"Easy as I, II, III\",\n value: \"roman\",\n description: \"Can you match these well-formed Roman numerals and avoid the incorrect examples?\",\n strings: [\n [\n \"XLII\",\n \"MMXX\",\n \"MDCCXIV\",\n \"Episode VIII: The Last Jedi\"\n ],\n [\n \"MMXXA\",\n \"IXI\",\n \"ID\",\n \"LIVE\"\n ]\n ],\n matches: [\n [\"III\"],\n [\"XLII\"],\n [\"MMXX\"],\n [\"MDCCXXIX\"]\n ],\n solution: /\\bM{0,3}(C[MD]|D?C{0,3})?(X[CL]|L?X{0,3})?(I[XV]|V?I{0,3})?\\b/g\n};\n\nconst regex = {\n name: \"Regex-ception\",\n value: \"regex-ception\",\n description: \"Trying to write a regex pattern to match any well-formed regex runs into problems of recursion and nesting. Instead, this challenge is to match a small number of well-formed regex and catch a few simple issues.\",\n strings: [\n [\n \"/(regex)/\",\n \"/colou?r/\",\n \"/\\\\d+/\"\n ],\n [\n \"/slash\\\\/\",\n \"/empty()/\"\n ]\n ],\n matches: [\n [\"/(regex)/\"],\n [\"/colou?r/\"],\n [\"/\\\\d+/\"]\n ],\n solution: /\\/[\\(\\\\]?[\\w\\?]+[\\)\\+]?\\//gi\n};\n\nconst titles = {\n name: \"I'm not great at titles\",\n value: \"titles\",\n description: \"Refactoring. Love it or hate it, it's a fact of coding. Even regular expressions. Try and match these titles ('Dr.', 'Mr', 'Mrs', 'Miss', 'Fr.'), and think about the different ways you can tackle this and the pros and cons of each.\",\n strings: [\n [\n \"Dr. Jill Biden\",\n \"Mr and Mrs Bun, the Bakers\",\n \"Miss Piggy\",\n \"Fr. Ted\"\n ],\n [\n \"Ar.\",\n \"Mississippi\",\n \"Drs\"\n ],\n ],\n matches: [\n [\"Dr.\"],\n [\"Mr\", \"Mrs\"],\n [\"Miss\"],\n [\"Fr.\"]\n ],\n solution: /([fd]r|mrs?|miss)(\\.|\\b)/gi\n};\n\nconst snowclones = {};\n\nconst comments = {\n name: \"// Comments\",\n value: \"comments\",\n description: \"\",\n strings: [\n [\n \"// Single-line comment\",\n \"/* Multi-line\\ncomment */\",\n \"const id = 2 // End of line comment\"\n ],\n [\n \"/regex/\",\n \"/* Have you made this typo before too? /*\",\n \"/* Multi-line comments\\nneed closing...\"\n ]\n ],\n matches: [\n [\"// Single-line comment\"],\n [\"/* Multi-line\\ncomment */\"],\n [\"// End of line comment\"]\n ],\n solution: /\\/(\\/[\\w\\s\\-]+|\\*[\\w\\s\\-]+\\*\\/)/\n};\n\nconst attributes = {};\n\nexport const challenges = [helloWorld, ordinals, catalan, titles, comments, roman, regex];\n","import { challenges } from './regex_data.js';\n\nlet regex = '';\nlet flags = '';\n\nconst regexInput = document.getElementById('regex');\nconst flagsInput = document.getElementById('flags');\n\nconst challengeName = document.getElementById('challenge-name');\nconst challengeDescription = document.getElementById('challenge-description');\nconst testStrings = document.getElementById('test-strings');\nconst challengeSelect = document.getElementById('challenge-select');\n\nlet challenge = challenges[0];\n\nconst reReplace = (string, i, re, polarity) => {\n const colour = polarity === 'yes' ? 'green' : 'red';\n document.getElementById(`${polarity}-${i}`)\n .innerHTML = string.replace(re, `$&`)\n .replace(new RegExp(\"\\n\", \"g\"), \"
\");\n};\n\nconst timesToCheck = icon => {\n icon.classList.remove('fa-times-circle');\n icon.classList.remove('red-txt');\n icon.classList.add('fa-check-circle');\n icon.classList.add('green-txt');\n};\n\nconst checkToTimes = icon => {\n icon.classList.remove('fa-check-circle');\n icon.classList.remove('green-txt');\n icon.classList.add('fa-times-circle');\n icon.classList.add('red-txt');\n};\n\nconst checkMatch = (i, match) => {\n if (match === null) { return false; }\n let target = challenge.strings[0][i].match(challenge.solution);\n\n return target.every((string, j) => {return string == match[j]});\n}\n\nconst reMatch = (string, i, re, polarity) => {\n const match = string.match(re);\n const icon = document.getElementById(`check-${polarity}-${i}`);\n\n if (polarity === 'no') {\n if (match === null && icon.classList.contains('fa-times-circle')) {\n timesToCheck(icon);\n } else if (match !== null && icon.classList.contains('fa-check-circle')) {\n checkToTimes(icon);\n }\n } else {\n if (checkMatch(i, match) && icon.classList.contains('fa-times-circle')) {\n timesToCheck(icon);\n } else if (!checkMatch(i, match) && icon.classList.contains('fa-check-circle')) {\n checkToTimes(icon);\n }\n }\n};\n\nconst handleInput = () => {\n const re = new RegExp(regex, flags);\n\n challenge.strings[0].forEach((string, i) => {\n reReplace(string, i, re, 'yes');\n reMatch(string, i, re, 'yes');\n });\n\n challenge.strings[1].forEach((string, i) => {\n reReplace(string, i, re, 'no');\n reMatch(string, i, re, 'no');\n });\n};\n\nregexInput.addEventListener('input', (event) => {\n regex = regexInput.innerHTML;\n handleInput();\n});\n\nflagsInput.addEventListener('input', (event) => {\n flags = flagsInput.innerHTML;\n handleInput();\n});\n\nchallengeSelect.addEventListener('input', (event) => {\n challenge = challenges.find(element => element.value == challengeSelect.value);\n buildHTML();\n});\n\nconst buildSelect = () => {\n for (let i = 0; i < challenges.length; i += 1) {\n const value = challenges[i].value;\n const name = challenges[i].name;\n challengeSelect.insertAdjacentHTML('beforeend', ``);\n }\n};\n\nconst buildHTML = () => {\n let yesChecks = \"\";\n let noChecks = \"\";\n\n challengeName.innerHTML = challenge.name;\n challengeDescription.innerHTML = challenge.description;\n regexInput.innerText = \"Your regex here\";\n flagsInput.innerText = \"Flags\";\n\n testStrings.innerHTML = \"\";\n\n testStrings.insertAdjacentHTML('beforeend', \"

Match these:

\");\n\n challenge.strings[0].forEach((string, i) => {\n testStrings.insertAdjacentHTML('beforeend', `
${challenge.strings[0][i].replace(new RegExp(\"\\n\", \"g\"), \"
\")}
`);\n yesChecks += ``;\n });\n\n testStrings.insertAdjacentHTML('beforeend', yesChecks);\n\n testStrings.insertAdjacentHTML('beforeend', \"

Don't match these:

\");\n\n challenge.strings[1].forEach((string, i) => {\n testStrings.insertAdjacentHTML('beforeend', `
${challenge.strings[1][i]}
`);\n noChecks += ``;\n });\n\n testStrings.insertAdjacentHTML('beforeend', noChecks);\n};\n\nbuildHTML();\nbuildSelect();\n"],"sourceRoot":""}