在JavaScript中用单反斜杠替换双反斜杠

时间:2017-06-25 22:21:52

标签: javascript regex

我正在编写一个删除\\并将其替换为\的函数。我注意到代码也不适用于不是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\""]

2 个答案:

答案 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 \.
    

演示

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

答案 1 :(得分:0)

当我们将"["\\\\\\"\\"a\\""]"传入console.log()时,函数实际看到的字符串看起来像"["\\\"\"a\""]",因为输入字符串在传递给函数之前被转义。替换正则表达式寻找双反斜杠,所以给定输入,它将只匹配该组三个的前两个反斜杠,将其替换为一个,并将其余部分保持原样...这就是为什么它将返回{{1 }}

如果你调用函数,从输入字段获取输入字符串,例如,你的函数可以正常工作。

如果你想使用显式字符串文字来实现你想要的结果,你可以使用"["\\"\"a\""]"作为替换正则表达式(实际上根本就不做替换)但是它不会两种方式都有效,除非到目前为止我知道,你提供的函数可以知道字符串的来源(可能带有可选参数)并手动处理可能性。

例如:

/\\/g

检查对x函数的调用是否传递了第二个参数,其值为&#34; console&#34;并相应地更改替换函数的正则表达式。