这里很简单。
我有一个HTML <textarea>
,我希望允许用户输入转义序列。即:
Hello\nworld\x21
我希望我的脚本能够“解释”\n
和\x21
来获取:
Hello
world!
由于
编辑: 这样做的目的是允许用户在html页面中输入热敏打印机的代码。打印机需要特殊的字符。我想取这个字符串,“解释”特殊代码并将其发送到打印机。目前,打印机按原样打印字符串。
答案 0 :(得分:0)
我能想到的唯一不使用 long 替换行的方法是使用 eval()
函数。例如,您可以使用以下内容:
function useEscapes(s) {
return eval('("' + s.replace(/([^\\]|^)(?=(\\\\)*["\n])/g, '$1\\').replace(/\n/g, 'n') + '")');
}
replace
是为了确保传递到eval()
函数是安全的。
编辑9/28/2016:
有一种更好的方法,不是安全风险。因为字符串文字是有效的JSON,所以可以将其包装在引号中并使用JSON.parse
。您还可以在其中转义引号,以便用户不会出现无法解释的语法错误。如果攻击者试图将代码放在字符串之外,则只会引发语法错误。
function useEscapes(s) {
return JSON.parse('"' + s
.replace(/((^|[^\\])(\\\\)*)"/g, '$1\\\\"') // optional - prevents syntax errors
+ '"');
}