Last active
June 3, 2025 08:15
-
-
Save caltuntas/c09ddd9e4297a0235924f65e6f72a4f6 to your computer and use it in GitHub Desktop.
hate-regex
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const placeHolderPattern = /#{(\w+)}/g; | |
| const args = process.argv.slice(2); | |
| if (args.length < 2) { | |
| console.log('missing arguments'); | |
| process.exit(1); | |
| } | |
| const replacements = [ | |
| { name: 'placeholder1', value: args[0] }, | |
| { name: 'placeholder2', value: args[1] }, | |
| ]; | |
| function replacer(match, placeHolderName) { | |
| const replacement = replacements.find(r => r.name === placeHolderName); | |
| if (!replacement) { | |
| throw new Error(`Replacement for ${placeHolder} place holder does not exist.`); | |
| } | |
| return replacement.value || ''; | |
| } | |
| let output = 'some text template #{placeholder1} and #{placeholder2} and some more text #{placeholder1}'; | |
| output = output.replace(placeHolderPattern, replacer); | |
| console.log(output); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const args = process.argv.slice(2); | |
| if (args.length < 2) { | |
| console.log('missing arguments'); | |
| process.exit(1); | |
| } | |
| const replacements = [ | |
| { name: 'placeholder1', value: args[0] }, | |
| { name: 'placeholder2', value: args[1] }, | |
| ]; | |
| let output = 'some text template #{placeholder1} and #{placeholder2} and some more text #{placeholder1}'; | |
| replacements.forEach((item) => { | |
| output = output.replaceAll(`#{${item.name}}`, item.value || ''); | |
| } | |
| ); | |
| console.log(output); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const args = process.argv.slice(2); | |
| if (args.length < 2) { | |
| console.log('missing arguments'); | |
| process.exit(1); | |
| } | |
| const replacements = [ | |
| { name: 'placeholder1', value: args[0] }, | |
| { name: 'placeholder2', value: args[1] }, | |
| ]; | |
| let output = 'some text template #{placeholder1} and #{placeholder2} and some more text #{placeholder1}'; | |
| replacements.forEach((item) => { | |
| const placeholder = `#{${item.name}}`; | |
| while (output.includes(placeholder)) { | |
| output = output.replace(placeholder, ()=>item.value || ''); | |
| } | |
| } | |
| ); | |
| console.log(output); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const placeHolderPattern = /#{(\w+)}/; | |
| const allPlaceHoldersPattern = new RegExp(placeHolderPattern, 'g'); | |
| const args = process.argv.slice(2); | |
| if (args.length < 2) { | |
| console.log('missing arguments'); | |
| process.exit(1); | |
| } | |
| const replacements = [ | |
| { | |
| name: 'placeholder1', | |
| value: args[0] | |
| }, | |
| { | |
| name: 'placeholder2', | |
| value: args[1] | |
| }, | |
| ]; | |
| let output = 'some text template #{placeholder1} and #{placeholder2} and some more text #{placeholder1}'; | |
| let matches; | |
| do { | |
| console.log('after replacement output=' + output); | |
| matches = allPlaceHoldersPattern.exec(output); | |
| if (matches) { | |
| const placeHolder = matches[1]; | |
| const replacement = replacements.find(r => r.name === placeHolder); | |
| if (!replacement) { | |
| throw new Error(`Replacement for ${placeHolder} place holder does not exist.`); | |
| } | |
| output = output.replace(placeHolderPattern, replacement.value || ''); | |
| allPlaceHoldersPattern.lastIndex = 0; | |
| } | |
| } while (matches); | |
| console.log(output); | |
| //test comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| parent { | |
| type { | |
| subtype TestSubType { | |
| element TestElement { | |
| attributes { | |
| name testname; | |
| description testdescription; | |
| count 1234; | |
| value testvalue; | |
| } | |
| owner person1; | |
| } | |
| } | |
| subtype TestSubType2 { | |
| element TestElement2 { | |
| attributes { | |
| name testname2; | |
| description testdescription2; | |
| count 2; | |
| value 2 | |
| } | |
| owner unknown; | |
| } | |
| } | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| parent { | |
| type { | |
| subtype TestSubType { | |
| element TestElement { | |
| attributes { | |
| name testname; | |
| description testdescription; | |
| count 1234; | |
| value testvalue; | |
| } | |
| owner person1; | |
| } | |
| } | |
| subtype TestSubType1 { | |
| element TestElement1 { | |
| attributes { | |
| name testname1; | |
| description testdescription1; | |
| count 1; | |
| value 1 | |
| } | |
| owner person2; | |
| } | |
| } | |
| subtype TestSubType2 { | |
| element TestElement2 { | |
| attributes { | |
| name testname2; | |
| description testdescription2; | |
| count 2; | |
| value 2 | |
| } | |
| owner unknown; | |
| } | |
| } | |
| subtype TestSubType3 { | |
| element TestElement3 { | |
| attributes { | |
| name testname3; | |
| description testdescription3; | |
| count 3; | |
| value 3 | |
| } | |
| owner unknown; | |
| } | |
| } | |
| subtype TestSubType3 { | |
| element TestElement4 { | |
| attributes { | |
| name testname4; | |
| description testdescription4; | |
| count 4; | |
| value 4 | |
| } | |
| owner unknown; | |
| } | |
| } | |
| subtype TestSubType4 { | |
| element TestElement5 { | |
| attributes { | |
| name testname5; | |
| description testdescription5; | |
| count 5; | |
| value 5 | |
| } | |
| owner unknown; | |
| } | |
| } | |
| subtype TestSubType5 { | |
| element TestElement6 { | |
| attributes { | |
| name testname6; | |
| description testdescription6; | |
| count 6; | |
| value 6 | |
| } | |
| owner unknown; | |
| } | |
| } | |
| subtype TestSubType6 { | |
| element TestElement7 { | |
| attributes { | |
| name testname7; | |
| description testdescription7; | |
| count 7; | |
| value 7 | |
| } | |
| owner unknown; | |
| } | |
| } | |
| subtype TestSubType7 { | |
| element TestElement8 { | |
| attributes { | |
| name testname8; | |
| description testdescription8; | |
| count 8; | |
| value 8 | |
| } | |
| owner unknown; | |
| } | |
| } | |
| subtype TestSubType8 { | |
| element TestElement9 { | |
| attributes { | |
| name testname9; | |
| description testdescription9; | |
| count 9; | |
| value 9 | |
| } | |
| owner unknown; | |
| } | |
| } | |
| subtype TestSubType9 { | |
| element TestElement10 { | |
| attributes { | |
| name testname10; | |
| description testdescription10; | |
| count 10; | |
| value 10 | |
| } | |
| owner unknown; | |
| } | |
| } | |
| subtype TestSubType10 { | |
| element TestElement11 { | |
| attributes { | |
| name testname11; | |
| description testdescription11; | |
| count 11; | |
| value 11 | |
| } | |
| owner unknown; | |
| } | |
| } | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const fs = require('fs'); | |
| const args = process.argv.slice(2); | |
| if (args.length < 1) { | |
| console.log('missing arguments'); | |
| process.exit(1); | |
| } | |
| const configFile = args[0]; | |
| const config = fs.readFileSync(configFile, 'utf8'); | |
| const regex = /parent\s*\{\s*type\s*\{[^{}]*subtype\s+TestSubType\s*\{[^{}]*element\s+TestElement\s*\{[^{}]*attributes\s*\{[^{}]*value\s+testvalue[^{}]*\}[^{}]*owner\s+person1/; | |
| const match = config.match(regex); | |
| console.log("Match:", match); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const fs = require('fs'); | |
| var RE2 = require("re2"); | |
| const args = process.argv.slice(2); | |
| if (args.length < 1) { | |
| console.log('missing arguments'); | |
| process.exit(1); | |
| } | |
| const configFile = args[0]; | |
| const config = fs.readFileSync(configFile, 'utf8'); | |
| const regex = /parent {[\s\S]*type.*[\s\S]*subtype.*[\s\S]*element.*[\s\S]*attributes.*[\s\S]*value testvalue.*[\s\S]*owner person1/; | |
| var re = new RE2(regex); | |
| const match = config.match(re); | |
| console.log("Match:", match); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const fs = require('fs'); | |
| const args = process.argv.slice(2); | |
| if (args.length < 1) { | |
| console.log('missing arguments'); | |
| process.exit(1); | |
| } | |
| const configFile = args[0]; | |
| const config = fs.readFileSync(configFile, 'utf8'); | |
| const regex = /parent {[\s\S]*type.*[\s\S]*subtype.*[\s\S]*element.*[\s\S]*attributes.*[\s\S]*value testvalue.*[\s\S]*owner person1/; | |
| const match = config.match(regex); | |
| console.log("Match:", match); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment