\ E不能替换自='\ E \\ E \ 10.1.2.154 \ E \ bcs \ E \ 30877_P9999_Adult {2} _02_05_2019_0329p.pdf'

时间:2019-02-13 10:29:00

标签: javascript regex

var str='\E\\E\10.1.2.154\E\bcs\E\30877_P9999_Adult{2}_02_05_2019_0329p.pdf';
var res=str.replace('\E', '');

我得到这样的回报:

\E.1.2.154EcsE877_P9999_Adult{2}_02_05_2019_0329p.pdf

我需要替换字符串中的所有'\E',并期望像这样的(\\10.1.2.154\bcs\30877_P9999_Adult{2}_02_05_2019_0329p.pdf)输出。请有一些人对此提出建议。我试图做几种方法来解决这个问题。没运气。当我尝试使用C#时,它工作正常。

static void Main(string[] args)
{
    string str=@"\E\\E\10.1.2.154\E\bcs\E\30877_P9999_Adult{2}_02_05_2019_0329p.pdf";
    str=str.Replace(@"\E","");
    Console.WriteLine(str);
    Console.Read();
}

但是,我需要用JavaScript。

2 个答案:

答案 0 :(得分:0)

var str='\E\\E\10.1.2.154\E\bcs\E\30877_P9999_Adult{2}_02_05_2019_0329p.pdf';
var res=str.replace(/\\E/g, '');
console.log(str, res)

您必须使用RegExg消除JavaScript中字符串内的转义符。

答案 1 :(得分:0)

在JavaScript中,与C#@前缀等效的是String.raw,后跟模板文字(请注意对策)。

要替换所有出现的事件(而不仅仅是一次),您需要使用replace修饰符将正则表达式传递给g

var str=String.raw`\E\\E\10.1.2.154\E\bcs\E\30877_P9999_Adult{2}_02_05_2019_0329p.pdf`;
var res=str.replace(/\\E/g, '');

console.log(res);

NB:正则表达式中的反斜杠是转义符,因此一个文字反斜杠需要\\

如果出于某种原因您真的想避免使用正则表达式,则可以使用split/join技巧,但它会慢一些:

var str=String.raw`\E\\E\10.1.2.154\E\bcs\E\30877_P9999_Adult{2}_02_05_2019_0329p.pdf`;
var res=str.split(String.raw`\E`).join('');

console.log(res);

较旧的JS引擎

对于不支持String.raw的较旧JS引擎,您需要使用标准的字符串文字,这些文字使用反斜杠作为转义字符。因此,您需要将所有这些都加倍。但这仅在将字符串写为文字时才需要。当您通过某些API获得字符串时,则无需在替换前更改字符串:

var str='\\E\\\\E\\10.1.2.154\\E\\bcs\\E\\30877_P9999_Adult{2}_02_05_2019_0329p.pdf';
var res=str.replace(/\\E/g, '');

console.log(res);