从字符串

时间:2018-04-25 20:22:22

标签: javascript compiler-construction

给定一个字符串,例如(这是一个javascript源文件):

"...attr1: i, TARGET: <JS_EXPRESSION>, attr3: {..."

如何使用已知的TARGET密钥解析Javascript表达式?

JS表达式可以是任意复杂的并且包含逗号,因此看起来像正则表达式除了找到初始目标键TARGET之外不会做什么。周围的代码也可以包含任意JS代码。

以下是我试图证明这不是家庭作业:

return source.replace(/TARGET: ([^,]*),/g, function(a, b){
  return operationOnExpression(b);
});

但是在<E>更复杂的案例中,这种情况失败,例如console.log('hi', 'there');

2 个答案:

答案 0 :(得分:2)

您可以使用几个分割提取表达式并创建包含该表达式的脚本标记并将其附加到head

const str = "...attr1: i, TARGET: console.log('here', 1), attr3: {..."

const exp = str.split('TARGET')[1].split(',').slice(0, -1).join().slice(1)

const script = document.createElement('script');
script.text = exp;

document.getElementsByTagName('head')[0].appendChild(script);

答案 1 :(得分:0)

如果TARGET列左侧的值不能包含逗号,您可以使用它们,直接搜索下一个逗号,直到您看到正确数量的“列”或者您看到“TARGET”为开始下一列。对于右侧的列也是如此。在Javascript中,您可以反复使用substrindexOf来执行此操作。

如果这不好,更多的信息,比如你正在使用的语言,你已经尝试过的东西,JS表达式是否被引号包围,都会有所帮助。