如何编写与自身不匹配的代码?

时间:2019-08-08 17:23:12

标签: javascript self-reference quine

我正在使用捆绑器捆绑JavaScript。捆绑程序会生成一些其他我要解析的调试信息。

我有获取源代码然后对其进行分析的代码。但是,问题在于源代码最终将对自身进行分析并与之匹配。我有这样的东西:

function find_between_string(haystack, start_delimiter, end_delimiter) { /**/ }

const output = find_between_string(input, "foo", "bar");

捆绑程序将每个文件缩小为一行,其中还包含添加的调试信息。

此文件生成的代码将类似于:

function find_between_string(haystack, start_delimiter, end_delimiter) { /**/ } const output = find_between_string(input, "foo", "bar"); // extra debug info foo something interesting bar

我的匹配功能逐行工作。每行可能包含也可能不包含我要查找的定界符。每行最多包含一个定界符-当前,除了包含此代码的行。

我希望代码能够找到foo something interesting bar字符串,但以当前形式,它会(也)匹配foo", "bar(本身!)。


还有一些其他限制条件

一个简单的解决方案是编写:

find_between_string(input, "f" + "oo", "bar");

这对我不起作用,因为捆绑程序还运行将对此进行优化的优化器。做一些更复杂的事情,例如[ "f", "oo" ].join("")"f#o#o".replace(/#/g, "")会诱使优化器不进行优化,而使智能/未来的优化器可以进行优化。

我也知道我要查找的字符串是base64编码的字符串,因此我可以轻松丢弃不需要的匹配项,也可以在找到最后一个匹配项的地方进行反向搜索。理想情况下,我希望代码与这些条件无关。

0 个答案:

没有答案