irongit

A better version of regex 101

> doesn't make a group

huncholanehuncholaneauthored
parent ef07782commit c1297238f0da4cd2410107c7e3995e3c27732274Browse files

1 file changed, +14 -7

+14-7src/builder.js
@@ -3,11 +3,13 @@ const parseBuilder = (str) => {
33 const ref = {};
44 for (let line of lines) {
55 if (!line.trim()) continue;
6- const r = /^(?<tabs>\s*)(?<name>\w*)(?<optional>\??):(?<regex>.*)/.exec(
7- line
8- );
6+ const r =
7+ /^(?<tabs>\s*)(?<name>\w*)(?<optional>\??)(?<type>[:>])(?<regex>.*)/.exec(
8+ line
9+ );
910 if (!r) return "";
1011 const lineData = r.groups;
12+ console.log(lineData);
1113 const tabs = lineData.tabs.length;
1214 if (!ref[tabs]) ref[tabs] = [lineData];
1315 else ref[tabs].push(lineData);
@@ -29,10 +31,15 @@ const buildToRegex = (build) => {
2931 const buildToRegexRecursion = (build, re) => {
3032 if (!build?.length) return re;
3133 const val = build.shift();
32- if (val.name) re += `(?P<${val.name}>${val.regex}`;
33- else re += `(?:${val.regex}`;
34- if (val.children) re += buildToRegexRecursion(val.children, "");
35- re += `)${val.optional}`;
34+ if (val.type === ":") {
35+ if (val.name) re += `(?P<${val.name}>${val.regex}`;
36+ else re += `(?:${val.regex}`;
37+ if (val.children) re += buildToRegexRecursion(val.children, "");
38+ re += `)${val.optional}`;
39+ } else if (val.type === ">") {
40+ re += val.regex;
41+ if (val.children) re += buildToRegexRecursion(val.children, "");
42+ }
3643
3744 return buildToRegexRecursion(build, re);
3845 };