我正在开发一个从API解析数据的JavaScript程序。部分数据以'\ t'等格式返回,我需要将其解析为tab(在此示例中)而不是'\ t'。
在PHP中,有一个名为stripcslashes()的精彩函数可以为我做这个,但我找不到一个等价的JavaScript。
有没有人知道JavaScript中的这种功能?或者将'\ t'解析为标签的方法?
答案 0 :(得分:2)
Javascript的字符串文字使用相同的反斜杠转义符。应该有办法利用它......
var escapedString = '\\t' // actually contains "\t"
, renderedString = (new Function('return "' + text + '"'))()
;
console.log(renderedString); // " " <= this is the tab character
请注意,这会使您的代码对注入攻击开放,并且非常不安全,尤其是escapedString
来自外部来源时!
它(差不多)和using 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
答案 1 :(得分:0)
如果你使用jQuery,html()和text()函数应该做你想要的。
var parsed = $("<div/>").html('\thello').text();