我想替换字符串中的一些字符,例如
console.log(
"truefalse".replace("e","E")
)
但使用jsfuck https://kamil-kielczewski.github.io/jsfuck/index.html约定只允许 6 个字符:[]()!+
,这里为了提高可读性,还允许使用字母 a-z 和 A-Z 以及数字 0-9 的 JS 字符串(因为很容易将此类字符串转换为 6 个字符的 jsf 代码)。所以我可以写如下
console.log(
"truefalse"["replace"]("e","E")
)
但在上面的代码中我使用禁止字符 - 逗号:,
。所以我使用了通过 2 个(或更多)参数调用函数的技术特林科特在这里 https://stackoverflow.com/a/63604570/860099如下
console.log(
"truefalse"["split"]()["concat"]([["e"]["concat"]("E")])
["reduce"](""["replace"]["apply"]["bind"](""["replace"]))
)
现在我想在替换函数中使用正则表达式并使用上述限制编写代码
console.log(
"truefalse"["replace"](/e/g,"E")
)
但我不知道如何处理正则表达式部分/e/g
?。是否可以在不使用任何类型的“eval”(其中字符串被解释为代码)的情况下完成此操作?
我没有找到访问的方法RegExp
不评估代码的构造函数,就像Function
构造函数:
""["replace"]["constructor"]("return RegExp")()
但考虑一下这一点
- 如果需要替换多个出现的地方,可以使用
replaceAll
第一个参数为字符串的方法
- 方法
match
and matchAll
可以与字符串参数一起使用,并且RegExp
将为该字符串即时创建对象,就像您调用过一样.match(RegExp(str))
因此,如果您需要将字符串拆分为四个字符的块,您可以使用.matchAll("....")
。只有两件事需要做更多:
- As
matchAll
返回一个迭代器,您需要从中创建一个数组;喜欢与Array.from
.
- 由于您无法直接访问
Array
变量,你可以使用[].constructor
反而。
- 返回的块位于嵌套数组中,需要展平。你可以链接一个
.flat()
呼吁这一点。
这样就变成了
console.log(
[]["constructor"]["from"]("abcdefghijkl"["matchAll"]("...."))["flat"]()
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)