这个问题有点奇怪,但我这样做只是为了学习目的。
我有这个字符串
var str = "document.write('<script>document.write(\"<script>document.write('<script>document.write(\"Hello World\");<\/script>');<\/script>\");<\/script>')";
并且,我正在尝试解析/评估此字符串,以便最内部document.write
打印&#34; Hello World&#34;。这是我尝试过的。
function (str) {
str = str.replace(/["']/g, '"')
.replace(/"<script>document.write/g, "")
.replace(/;<\/script\>"/g, "");
eval(str);
}
但是,这看起来像是可怕的作弊行为。我想以更微妙的方式做到这一点。例如,转义\
或拆分</script>
标记。但是不能简单地逃避反斜杠,因为对于更深的嵌套,斜线的数量需要更多。
有什么想法吗?