我知道这是一个古老的答案,但看到上面的答案,我觉得不得不回答纯粹的问题,然后回答提问者问题的精神。
可以在模板文字字符串中使用 cmets 吗?
是的。是的你可以。但这并不漂亮。
const fields = `
id, ${/* post ID */''}
message, ${/* post/status message */''}
created_time, ${/*... */''}
permalink_url,
type
`;
请注意,您必须将 ''(一个空字符串)放在 ${ } 大括号中,以便 Javascript 可以插入表达式。不这样做会导致运行时错误。引号可以放在评论之外的任何地方。
我不是这个的忠实粉丝。它非常丑陋,并且使评论变得麻烦,更不用说在大多数 IDE 中切换 cmets 变得很困难。
就我个人而言,我尽可能使用模板字符串,因为它们比常规字符串更有效,而且它们从字面上捕获您想要的所有文本,大部分没有转义。你甚至可以把函数调用放在那里!
上面示例中的字符串会有点奇怪,并且对于您要查找的内容可能毫无用处,但是,因为会有一个初始换行符、逗号和注释之间的额外空格,以及一个额外的最后换行符。删除不需要的空间可能会对性能造成很小的影响。您可以为此使用正则表达式,以提高速度和效率,但...更多关于以下内容...
.
现在回答问题的意图:
如何编写一个逗号分隔的列表字符串,每行都有 cmets?
const fields = [
"id", // post ID
"message", // post/status message
"created_time", //...
"permalink_url",
"type"
].join(",\n");
加入数组是一种方式...(如@jared-smith 所建议)
但是,在这种情况下,当您只分配 join() 函数的返回值时,您正在创建一个数组,然后立即丢弃组织的数据。不仅如此,您还为数组中的每个字符串创建了一个内存指针,直到作用域结束时才会对它进行垃圾收集。在这种情况下,捕获数组、根据使用指示动态连接或使用模板文字并以不同方式注释您的实现可能更有用,例如 ghostDoc 样式。
您似乎只使用模板文字来满足在每一行上没有引号的愿望,从而最大限度地减少“字符串”查询参数在 url 和代码中的认知失调。你应该知道这会保留换行符,我怀疑你想要那个。请考虑:
/****************
* Fields:
* id : post ID
* message : post/status message
* created_time : some other comment...
*/
const fields = `
id,
message,
created_time,
permalink_uri,
type
`.replace(/\s/g,'');
这使用正则表达式过滤掉所有空格,同时保持列表的可读性和可重新排列。正则表达式文字所做的只是捕获空格,然后替换方法将捕获的文本替换为''(末尾的g 只是告诉正则表达式不要在它找到的第一个匹配项处停止,在这种情况下,第一个换行符。)
或者,最讨厌的是,您可以直接将 cmets 放入模板文字中,然后使用正则表达式剥离它们:
const fields = `
id, // post ID
message, // post/status message
created_time, // ...
permalink_uri,
type
`.replace(/\s+\/\/.*\*\/\n/g,'').replace(/\s/g,'');
第一个正则表达式将查找并用空字符串 ('') 替换以下所有实例:一个或多个在双斜杠之前的空白字符(每个斜杠由反斜杠转义),后跟空格和换行符.如果你想使用/* multiline */ cmets,这个正则表达式会变得有点复杂,你必须在最后添加另一个.replace():
.replace(/\/\*.*\*\//g,'')
该正则表达式只能在您删除 \n 换行符后才能使用,否则正则表达式将与 now-not-multiline 注释不匹配。看起来像这样:
const fields = `
id, // post ID
message, /* post/
status message */
created_time, // ...
permalink_uri,
type
`.replace(/\s+\/\/.*\n/g,'').replace(/\s/g,'').replace(/\/\*.*\*\//g,'');
以上所有内容都会产生这个字符串:
"id,message,created_time,permalink_uri,type"
可能只有一个正则表达式就可以做到这一点,但这超出了这里的范围,真的。此外,我鼓励你自己玩正则表达式来爱上它们!
稍后我会尝试联系https://jsperf.com/。我现在超级好奇!