javascript - Markdown 和转义 Javascript 换行符

标签 javascript erlang markdown

我正在用 Erlang 编写一个 Markdown 编译器供服务器端使用。因为它需要与客户端一起工作,所以我决定采用客户端库 (showdown.js) 作为规范,然后测试我的代码与它的兼容性。

在前几次迭代中,我建立了 260 多个单元测试,检查我的程序产生的输出是否与我认为有效的 markdown 兼容,基于阅读 syntax notes .

但现在我正在尝试编写一个 javascript 程序来生成我的单元测试。

我有这样的输入:

"3 > 4\na"

我想对其进行“摊牌”以获得:

"<p>3 &gt; 4\na</p>"

我想把它拼接成一个 EUnit 断言:

"?_assert(conv(\"3 > 4\na\") == \"<p>3 &gt; 4\na</p>\"),",

这是单元测试的有效 Erlang 语法。为了让生活更轻松,并使单元测试生成器可移植,我在网页中执行此操作,以便通过将一些行附加到 javascript 文件然后查看页面,您可以在 <textarea /> 中获得一组新的单元测试。然后将其复制到模块中以运行 EUnit。

问题是我无法将换行符转换为 \n在字符串中,所以我最终得到:

"?_assert(conv(\"3 > 4
a\") == \"<p>3 &gt; 4
a</p>\"),",

我尝试使用如下代码将换行符转换为其转义版本:

text.replace("\\", "\\\\");
text.replace("\n", "\\n");

但没有快乐...

最佳答案

Tom McNulty 帮助我指出我的正则表达式是 super 裤子,特别是我没有使用全局标志 :(

工作代码是:

var converter;
var text = "";
var item;
var input;
var output;
var head;
var tail;
converter = new Attacklab.showdown.converter();
item = document.getElementById("tests");
for (var test in tests) {
  input = tests[test].replace(/[\n\r]+/gi,"\\n" );
  input = input.replace(/[\"]+/gi, "\\\"");
  output = converter.makeHtml(tests[test]).replace(/[\n\r]+/gi, "\\n");
  output = output.replace(/[\"]+/gi, "\\\"");
  text += "     ?_assert(conv(\"" + input + "\") == \"" + output + "\"),\n";
};
head = "unit_test_() -> \n    [\n";
tail = "\n    ].";
text = text.slice(0, text.length - 2);
item.value = head + text + tail;

关于javascript - Markdown 和转义 Javascript 换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1517207/

相关文章:

JavaScript 过滤器数组

erlang - Dialyzer 在不良记录构建时警告 no_exit - 这是一个错误吗?

erlang - 如何在 ERLANG 上调用具有两个以上参数的打印函数?

r - 是否有直接在代码中增加 Xaringan 幻灯片的快捷方式?

如何开始Node.js的学习

javascript - jquery 追加/前置/wrapInner?

image - Markdown 中损坏的图像链接

Laravel 5.4 邮件 Markdown 2 按钮内联

javascript - Promise.defer 标准?

linux - ejabberd 在安装时配置时显示错误