我有以下的 Ruby 代码。我想将这段代码转换成 JavaScript。请问在 JavaScript 中等价的代码是什么?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
我有以下的 Ruby 代码。我想将这段代码转换成 JavaScript。请问在 JavaScript 中等价的代码是什么?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
name is ${value}
`)。
您还可以:
const value = `multiline`
const text = `This is a
${value}
string in js`;
console.log(text);
我喜欢这种语法和缩进:
string = 'my long string...\n'
+ 'continue here\n'
+ 'and here.';
(但实际上不能被视为多行字符串)
var new_comment; /*<<<EOF
<li class="photobooth-comment">
<span class="username">
<a href="#">You</a>:
</span>
<span class="comment-text">
$text
</span>
@<span class="comment-time">
2d
</span> ago
</li>
EOF*/
// note the script tag here is hardcoded as the FIRST tag
new_comment=document.currentScript.innerHTML.split("EOF")[1];
document.querySelector("ul").innerHTML=new_comment.replace('$text','This is a dynamically created text');
<ul></ul>
有一个能让它变得很漂亮的库:
https://github.com/sindresorhus/multiline
var str = '' +
'<!doctype html>' +
'<html>' +
' <body>' +
' <h1>❤ unicorns</h1>' +
' </body>' +
'</html>' +
'';
var str = multiline(function(){/*
<!doctype html>
<html>
<body>
<h1>❤ unicorns</h1>
</body>
</html>
*/});
nodejs
中使用,但在浏览器中使用时必须小心。 - Huei TanFunction.prototype.String()
。 - mikemaccana发现这里有很多过度工程化的答案。在我看来,最好的两个答案是:
1:
let str = `Multiline string.
foo.
bar.`
最终记录如下:
Multiline string.
foo.
bar.
2:
let str = `Multiline string.
foo.
bar.`
它可以正确记录日志,但如果str嵌套在函数/对象等中,那么在脚本文件中它会显得很丑陋:
Multiline string.
foo.
bar.
这是一个用正则表达式编写的简单答案,可以正确记录该字符串:
let str = `Multiline string.
foo.
bar.`.replace(/\n +/g, '\n');
请注意,这并不是完美的解决方案,但如果您确定在换行符(\n)之后至少会出现一个空格(+表示至少出现一次),它仍然可以奏效。它还可以与*(零个或多个)一起使用。
您可以更加明确地使用{n,},它表示至少出现n次。
[ "line", "line2", "line3" ].join("\n")
呢? - Kaz这在IE,Safari,Chrome和Firefox中有效:
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<div class="crazy_idea" thorn_in_my_side='<table border="0">
<tr>
<td ><span class="mlayouttablecellsdynamic">PACKAGE price $65.00</span></td>
</tr>
</table>'></div>
<script type="text/javascript">
alert($(".crazy_idea").attr("thorn_in_my_side"));
</script>
'
的边缘情况。在这种情况下,您可能需要使用HTML实体'
。 - borracciaBlu总之,在用户JavaScript编程(Opera 11.01)中,我尝试了以下两种方法:
所以,我推荐Opera用户使用有效的方法。与作者所说的不同:
它不能在Firefox或Opera上工作;只能在IE、chrome和safari上工作。
它在Opera 11中确实起作用。至少在用户JS脚本中是如此。很遗憾我不能对单独的答案发表评论或点赞,如果可能的话,请有更高权限的人替我完成。
Ruby 生成: "This\nIs\nA\nMultiline\nString\n"
- 下面的JS代码生成了完全相同的字符串
text = `This
Is
A
Multiline
String
`
// TEST
console.log(JSON.stringify(text));
console.log(text);
\n
的确切位置(与Ruby输出进行比较(工作示例链接在答案中)) - 这是Lonnie答案的改进,因为他答案中的换行符位置与Ruby输出不完全相同。 - Kamil Kiełczewski我的扩展是基于https://dev59.com/c3RA5IYBdhLWcg3w2xsI#15558082的。
它期望以这种形式的注释出现:/*! 任意多行注释 */
其中符号!用于防止被缩小(至少对于YUI压缩器)移除
Function.prototype.extractComment = function() {
var startComment = "/*!";
var endComment = "*/";
var str = this.toString();
var start = str.indexOf(startComment);
var end = str.lastIndexOf(endComment);
return str.slice(start + startComment.length, -(str.length - end));
};
例子:
var tmpl = function() { /*!
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
</ul>
</div>
*/}.extractComment();