Markdown和Escapeing Javascript换行符

时间:2009-10-04 19:44:18

标签: javascript erlang markdown

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

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

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

我有一个输入:

"3 > 4\na"

我想在它上面运行'showdown'来获取:

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

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

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

这是单元测试的有效Erlang语法。为了让生活更轻松,并使单元测试生成器可移植我在网页中进行,这样通过在javascript文件中添加一些行然后查看页面,您可以在{{1}内获得新的单元测试集然后将其复制到模块中以运行EUnit。

问题是我无法将换行符转换为字符串中的<textarea />,所以我最终得到:

\n

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

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

但没有快乐......

1 个答案:

答案 0 :(得分:2)

Tom McNulty帮助我,并指出我的正则表达式是超级裤子,特别是我没有使用全球旗帜:(

工作代码是:

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;