我正在编写一个删除\\
并将其替换为\
的函数。我注意到代码也不适用于不是2的幂的反斜杠(当然不是2)。
function x(input){
var arr = [];
for(var i = 0; i < input.length; i++){
var result = input[i].replace(/\\\\/g, '\\');
arr.push(result);
}
return arr;
}
console.log(x(['\\a']));
代码将返回[ '\\a' ]
。
编辑:
这是一个更复杂的例子:
输入:["\\\\\\"\\"a\\""]
输出:[ '\\""a"' ]
期望的输出:["\\\"\"a\""]
答案 0 :(得分:2)
使用正则表达式时,
文字反向实体(a.k.a。反斜杠,(a.k.a。\
))必须使用\
进行转义。
因此,当您输入\\
时,字面意思\
。
如果您想输入2 \
,则每个人都必须进行转义。这意味着\\\\
实际上是一个2 \
字符串。
以下演示使用ES6模板文字:
它是String的一种新语法,它使用反引号 ` (左上角键)而不是引号&#34; 或&#39; 。
它可以通过前缀${
和后缀}
来插入变量。
var x = 2; `this template literal will display x as ${x}.`
// this template literal will display x as 2.
unicode中\
为U+5c
。在Template Literal中使用转义的unicode,它将以\u{
为前缀,并以}
为后缀
`A template literal with an escaped unicode backslash is \u{5c}`
// A template literal with an escaped unicode backslash is \.
function XtoY(str, x, y) {
var rgx = `/${x}/g`;
var result = str.replace(rgx, `${y}`);
return result;
}
const uni = `\u{5c}`;
const string = `\\a\\a\\b`;
const from = `${uni}${uni}`
const to = `${uni}`;
let z = XtoY(string, from, to);
console.log(z);
&#13;
答案 1 :(得分:0)
当我们将"["\\\\\\"\\"a\\""]"
传入console.log()
时,函数实际看到的字符串看起来像"["\\\"\"a\""]"
,因为输入字符串在传递给函数之前被转义。替换正则表达式寻找双反斜杠,所以给定输入,它将只匹配该组三个的前两个反斜杠,将其替换为一个,并将其余部分保持原样...这就是为什么它将返回{{1 }}
如果你调用函数,从输入字段获取输入字符串,例如,你的函数可以正常工作。
如果你想使用显式字符串文字来实现你想要的结果,你可以使用"["\\"\"a\""]"
作为替换正则表达式(实际上根本就不做替换)但是它不会两种方式都有效,除非到目前为止我知道,你提供的函数可以知道字符串的来源(可能带有可选参数)并手动处理可能性。
例如:
/\\/g
检查对x函数的调用是否传递了第二个参数,其值为&#34; console&#34;并相应地更改替换函数的正则表达式。