Javascript正则表达式为字符串的每个字符添加一个反斜杠

时间:2018-04-17 18:23:22

标签: javascript regex

因为标题说我想在字符串的每个字符中加一个反斜杠,无论字符串是否有特殊字符。该字符串不应被视为安全'

eg: 
let str = 'dj%^3&something';
str = str.replace(x, y);
// str = '\d\j\%\^\3\&\s\o\m\e\t\h\i\n\g'

4 个答案:

答案 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);

然后你可以保证将它视为文本,并且无法执行脚本或其他任何内容。

例如:https://jsfiddle.net/s6udj03L/1/

答案 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;
&#13;
&#13;

答案 3 :(得分:0)

如果您不关心创建新的string并且不必使用正则表达式,为什么不迭代现有的正则表达式并放置\之前每个char。请注意,您必须放置\\以逃避第一个\

为了安全起见,你必须以某种方式对其进行编码。您可以替换典型的非安全&#39;下面的encode()函数中的字符。请注意&

取代&amp;的方法

&#13;
&#13;
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, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
}
&#13;
&#13;
&#13;