gpt4 book ai didi

node.js - 如何在 iojs 中获取模板字符串的原始版本

转载 作者:太空宇宙 更新时间:2023-11-03 22:46:46 27 4
gpt4 key购买 nike

是否可以在 iojs 中获取模板字符串的原始版本?

var s = `foo${1+1}bar`
console.log(s); // foo2bar

在前面的示例中,我想获取字符串:foo${1+1}bar

编辑1:我的需要是检测模板字符串是否依赖于它的上下文,如果它只是一个可能包含 CR 和 LF 的“常量”字符串

最佳答案

Is it possible to get the raw version of a template string in iojs ?

不,不是。不可能获得文字的原始表示,就像在这些情况下无法获得“原始”文字一样:

var foo = {[1+1]: 42};
var bar = 1e10;
var baz = "\"42\"";

请注意,术语“模板字符串”具有误导性(因为它可能表明您可以以某种方式获取字符串的原始值(这也不是如上所示的情况))。正确的术语是"template literal ”。

My need is to detect whether a template string depends on its context of if is is just a 'constant' string that may contain CR and LF

看起来像是静态分析工具的工作。例如。您可以使用recast解析源代码并遍历所有模板文字。

例如,the AST representation of `foo${1+1}bar` is :

enter image description here

如果这样的 AST Node 是一个空的表达式属性,那么你就知道该值是常量。

<小时/>

有一种方法可以确定模板文字在运行时是“静态”还是“动态”,但这涉及更改代码的行为。

您可以使用标记模板。标记模板是传递模板文字的静态和动态部分的函数。

示例:

function foo(template, ...expressions) {
console.log(template, expressions);
}

foo`foo${1+1}bar` // logs (["foo", "bar"], [2]) but returns `undefined`

即如果 foo 仅传递一个参数,则模板文字不包含表达式。但是,foo 还必须将静态部分与动态部分进行插值并返回结果(上面的示例中未显示)。

关于node.js - 如何在 iojs 中获取模板字符串的原始版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31293928/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com