irongit

A better version of regex 101

full regex comprehension

huncholanehuncholaneauthored
parent 77c9441commit bc690b4114826653ec37efd409a71f9db3365df4Browse files

1 file changed, +20 -4

+20-4src/App.jsx
@@ -8,11 +8,26 @@ group1Delim:\\n
88 \t\tvar3:\\w
99 \t\tvar4:\\d`;
1010
11-const parseBuilder = (str, state, setState) => {
11+const buildToRegex = (build) => {
12+ const re = buildToRegexRecursion(build, "");
13+ return re;
14+};
15+
16+const buildToRegexRecursion = (build, re) => {
17+ if (build.length === 0) return re;
18+ const val = build.shift();
19+ re += `(?P<${val.name}>${val.regex}`;
20+ if (val.children) re += buildToRegexRecursion(val.children, "");
21+ re += `${val.optional})`;
22+
23+ return buildToRegexRecursion(build, re, val);
24+};
25+
26+const parseBuilder = (str) => {
1227 const r = parseBuilderRegex(0);
1328 const m = r.exec(str);
1429 const vars = parseBuilderRecursion([], m, 0);
15- console.log(vars);
30+ return buildToRegex(vars);
1631 };
1732
1833 const parseBuilderRecursion = (vars, pm, lvl) => {
@@ -20,7 +35,6 @@ const parseBuilderRecursion = (vars, pm, lvl) => {
2035 vars.push(pm.groups);
2136 pm.input = pm.input.split(pm[0])[1];
2237 if (!pm.input.trim()) {
23- console.log("done traversing");
2438 return vars;
2539 }
2640
@@ -98,7 +112,9 @@ function App() {
98112 onChangeCapture={(e) => {
99113 state.build = [];
100114 setState({ ...state });
101- parseBuilder(e.target.value, state, setState);
115+ const parseBuild = parseBuilder(e.target.value);
116+ regexInputSpan.focus();
117+ regexInputSpan.dispatchEvent(new Event("keydown", { key: "a" }));
102118 }}
103119 ></textarea>
104120 </div>