因为标题说我想在字符串的每个字符中加一个反斜杠,无论字符串是否有特殊字符。该字符串不应被视为安全'
eg:
let str = 'dj%^3&something';
str = str.replace(x, y);
// str = '\d\j\%\^\3\&\s\o\m\e\t\h\i\n\g'
答案 0 :(得分:3)
您可以使用(.)
捕获字符串中的每个字符并使用\\$1
替换,我不是专家,但基本上\\
将呈现给\
和{ {1}}会呈现给$1
次捕获。
HIH
修改强>
请参阅Wiktor Stribiżew's comment以获取需要较少编码的替代方案。变更如下:
(.)
的 str = str.replace(/(.)/g, '\\$1');
此外,为了将来参考,我强烈建议您访问regexr.com,当谈到正则表达式时,它对我有很多帮助
str = str.replace(/./g, '\\$&');
答案 1 :(得分:2)
如果您只想安全地显示字符串,您应该这样做:
let str = 'dj%^3&something';
let node = document.createTextNode(str);
let dest = document.querySelector('.whatever');
dest.appendChild(node);
然后你可以保证将它视为文本,并且无法执行脚本或其他任何内容。
答案 2 :(得分:0)
您可以将字符串拆分为数组,向数组中的每个元素添加\
,然后将数组连接回您想要的字符串。
var str = 'dj%^3&something';
var split = str.split(""); // split string into array
for (var i = 0; i < split.length; i++) {
split[i] = '\\' + split[i]; // add backslash to each element in array
}
var joint = split.join('') // joint array to string
console.log(joint);
&#13;
答案 3 :(得分:0)
如果您不关心创建新的string
并且不必使用正则表达式,为什么不迭代现有的正则表达式并放置\
之前每个char
。请注意,您必须放置\\
以逃避第一个\
。
为了安全起见,你必须以某种方式对其进行编码。您可以替换典型的非安全&#39;下面的encode()
函数中的字符。请注意&
&
的方法
let str = 'dj%^3&something';
let out = "";
for(var i = 0; i < str.length; i++) {
out += ("\\" + str[i]);
}
console.log(out);
console.log(encode(out));
function encode(string) {
return String(string).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
}
&#13;