A better version of regex 101
ugly workaround with timeout
1 file changed, +21 -6
+21-6src/App.jsx
| @@ -14,7 +14,7 @@ const buildToRegex = (build) => { | ||
| 14 | 14 | }; |
| 15 | 15 | |
| 16 | 16 | const buildToRegexRecursion = (build, re) => { |
| 17 | - if (build.length === 0) return re; | |
| 17 | + if (!build?.length) return re; | |
| 18 | 18 | const val = build.shift(); |
| 19 | 19 | re += `(?P<${val.name}>${val.regex}`; |
| 20 | 20 | if (val.children) re += buildToRegexRecursion(val.children, ""); |
| @@ -79,9 +79,12 @@ function App() { | ||
| 79 | 79 | valid: true, |
| 80 | 80 | build: [], |
| 81 | 81 | }); |
| 82 | - const regexInputSpan = Array.from(document.querySelectorAll("span")).filter( | |
| 83 | - (span) => span.getAttribute("role") === "presentation" | |
| 84 | - )[0]; | |
| 82 | + const regexInput = document.querySelector( | |
| 83 | + "#regex-app > div > div.QtZzw > div > div.AUc0W > div.rjodX > div.cO83v > div.h9z_E.T886D > div > div > div:nth-child(1) > textarea" | |
| 84 | + ); | |
| 85 | + const regexValue = document.querySelector( | |
| 86 | + "#regex-app > div > div.QtZzw > div > div.AUc0W > div.rjodX > div.cO83v > div.h9z_E.T886D > div > div > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code" | |
| 87 | + ); | |
| 85 | 88 | |
| 86 | 89 | return ( |
| 87 | 90 | <div> |
| @@ -113,8 +116,20 @@ function App() { | ||
| 113 | 116 | state.build = []; |
| 114 | 117 | setState({ ...state }); |
| 115 | 118 | const parseBuild = parseBuilder(e.target.value); |
| 116 | - regexInputSpan.focus(); | |
| 117 | - regexInputSpan.dispatchEvent(new Event("keydown", { key: "a" })); | |
| 119 | + if (!parseBuild) setState({ valid: false }); | |
| 120 | + else setState({ valid: true }); | |
| 121 | + //regexInput.focus(); | |
| 122 | + const length = regexValue.textContent.length; | |
| 123 | + for (let i = 0; i < length; i++) | |
| 124 | + regexInput.dispatchEvent( | |
| 125 | + new KeyboardEvent("keydown", { | |
| 126 | + key: "Backspace", | |
| 127 | + code: "Backspace", | |
| 128 | + keyCode: 8, | |
| 129 | + }) | |
| 130 | + ); | |
| 131 | + regexInput.value = parseBuild; | |
| 132 | + setTimeout(() => e.target.focus(), 100); | |
| 118 | 133 | }} |
| 119 | 134 | ></textarea> |
| 120 | 135 | </div> |