我在使用 JavaScript 正则表达式时遇到了严重问题。我想要的是“仅正则表达式”解决方案来执行这样的转换:
{{ users.name.find(50, "q")|lower }} ---> lower(users.name.find(50, "q"))
我最终进行了以下分解,并且效果很好:
var m = '{{ users.name.find(50, "q")|lower }}';
var p = m.replace(/{{2}[ ]*([^{}, ]*[^{}]*[^{}, ]+)[ ]*}{2}/g, "$1");
console.log(p); ---> users.name.find(50, "q")|lower
var k = p.replace(/(.+)(\|{1}(.*))+/g, "$3($1)");
console.log(k); ---> lower(users.name.find(50, "q")) ---> OK, it's fine.
但是现在,我希望它能够处理这样复杂的过滤:
var m = '{{ users.name.find(50, "q")|lower|filter(5, 9)|short|encode(true) }}';
最后我期待这样的事情:
console.log(
m.replace(/MagicalRegexFromHell/g)
.split(...).join(...)
.replace(/GuruRegex2/g, 'recursive thing that does not exists $n($n-1)')
.replace('/OkItsDone/g')
)
----> encode(short(filter(lower(users.name.find(50, "q")), 5, 9)), true)
我已经花了几个小时,所以如果有人有一个只使用 split() / replace() / regex 和 join() 的解决方案,那会很酷,因为我无法在我的代码实现中使用分支语句(那是它:没有开关,没有 if 等......)
谢谢你。