我正在开发一个从 API 解析数据的 JavaScript 程序。部分数据以“\t”等格式返回,我需要将其解析为制表符(在本例中)而不是“\t”。
在 PHP 中,有一个很棒的函数叫做stripcslashes()可以为我做这件事,但我找不到 JavaScript 的等价物。
有人知道 JavaScript 中有这样的函数吗?还是一种将 '\t' 解析为制表符的方法?
我正在开发一个从 API 解析数据的 JavaScript 程序。部分数据以“\t”等格式返回,我需要将其解析为制表符(在本例中)而不是“\t”。
在 PHP 中,有一个很棒的函数叫做stripcslashes()可以为我做这件事,但我找不到 JavaScript 的等价物。
有人知道 JavaScript 中有这样的函数吗?还是一种将 '\t' 解析为制表符的方法?
Javascript 的字符串文字使用相同的反斜杠转义。应该有办法利用它...
var escapedString = '\\t' // actually contains "\t"
, renderedString = (new Function('return "' + text + '"'))()
;
console.log(renderedString); // " " <= this is the tab character
请注意,这会使您的代码对注入攻击敞开大门,并且非常不安全,特别是如果escapedString
来自外部源!
它(几乎)和使用 eval一样糟糕!
更新:安全的方式
更好的方法可能是使用正则表达式:
var escapedString = '\\t' // actually contains the characters \ and t
, renderedString = escapedString.replace(/\\(.)/g, function (match, char) {
return {'t': '\t', 'r': '\r', 'n': '\n', '0': '\0'}[char] || match;
}
;
console.log(renderedString); // " " <= this is the tab character
在这里,您将使用replace方法来跟踪给定字符串中的所有反斜杠(后跟任何字符),并在每次找到匹配项时调用匿名函数。该函数的返回值将确定该匹配将被替换为什么。
匿名函数包含一个 JS 对象(在本例中用作关联数组),其中包含所有可识别的转义字符。反斜杠后面的字符(这里称为char
)将在该关联数组中查找,JS 将返回相应的值。
行的最后一部分|| char
, 确保如果char
不是关联数组的一部分,则使用未更改的匹配项(包括反斜杠),而原始字符串保持不变。
当然,这确实意味着您必须提前指定所有可能的转义。
第二次更新:要走的路
我突然想到第一种方法不安全(可能存在欺诈性输入),而第二种方法不确定(您并不真正知道需要提供什么转义);也许这两种方法可以结合起来!
var escapedString = '\\t' // actually contains the characters \ and t
, renderedString = escapedString.replace(/\\./g, function (match) {
return (new Function('return "' + match + '"'))() || match;
}
;
console.log(renderedString); // " " <= this is the tab character
当然,这个解决方案的性能不会很好。解析和构建这个新函数是一件昂贵的事情,并且需要为转义字符串中存在的每个匹配的反斜杠完成。如果性能成为问题,您可以添加某种缓存机制,它会在创建每个函数后记住它。
然后,您还可以查找需要使用的 API,尝试查找其文档或联系其制造商,并获得它可以产生的最终转义列表。:-0
如果您使用的是 jQuery,那么 html() 和 text() 函数应该可以满足您的需求。
var parsed = $("<div/>").html('\thello').text();