В JavaScript вы можете сделать:
someComplexProcessing = (wholeMatch, group1, group2, index, mystr)=> replacement...
mystr.replace(/some.* regex(with) multiple (capture groups)/g, someComplexProcessing)
например.
const renderTemplate = (str, env)=> str.replace(/{{(.*?)}}/g, (_, name)=> env[name])
renderTemplate('{{salut}} {{name}}!', {salut: 'Hi', name: 'Leo'}) // "Hi Leo!"
Какой наилучший, совместимый с POSIX, универсальный вариант?
- reusability # eg. a function taking regex, processingFunction, and input, etc - that I could but in my .shellrc/source lib.sh or similar and reuse
- multiline # eg. if "uppercase everything between {{ and }}", `a {{b\nc}}` -> `a B\nC`
- no escape gotchas # eg. it shouldn't break if input, replacement, or regex contains special characters
- POSIX compatible # eg. running it under `docker run --rm -it alpine sh`, etc
- using regex # eg. perl regex seems like the most prominent one, please note differences from it if other is used
meriting:
- no/less dependencies # eg. as portable as possible
- multiple capture groups
- performance
- security # related to no escape gotchas, eg. ok with untrusted input
Я нашел пару решений для bash и несколько совместимых решений для краевого случая, хотя ни одно из них не делает все это настолько близким к простоте, которую обеспечивает js '.replace. В конечном счете, я хочу программировать, не слишком задумываясь о деталях реализации / проблемах, и не вводя сотни МБ (в основном в альпийский контейнер, но также используя ubuntu / OSX), тем самым пытаясь создать библиотеку переносимых, совместимых с posix фрагменты, функции и шаблоны.