sourcecode

Javascript에서 이중 백슬래시를 단일 백슬래시로 바꾸기

copyscript 2023. 9. 1. 21:14
반응형

Javascript에서 이중 백슬래시를 단일 백슬래시로 바꾸기

다음과 같은 문제가 있습니다.

서버에 대한 AJAX 요청을 실행하는 스크립트가 있으면 서버가 반환됩니다.C:\backup\시사회에서하지만, 그 반응은."C:\\backup\\"큰 문제는 아닙니다. 더블 슬래시를 싱글 슬래시로 교체하려고 생각했기 때문입니다.여기 스택에서 찾아봤는데, 백슬래시 하나를 더블로 교체하는 방법만 찾았는데, 반대로 필요해요.

누가 이 문제를 도와줄 수 있습니까?

이렇게 하면 됩니다."C:\\backup\\".replace(/\\\\/g, '\\')

정규식에서, 단일\로 탈출해야 합니다.\\그리고 그 대신에\또한.

[edit 2021] 템플릿 리터럴을 사용하는 것이 더 나을 수 있습니다.

console.log(`original solution ${"C:\\backup\\".replace(/\\\\/g, '\\')}`)

// a template literal will automagically replace \\ with \
console.log(`template string without further ado ${`C:\\backup\\`}`);

// but if they are escaped themselves
console.log(`Double escaped ${`C:\\\\backup\\\\`.replace(/\\{2,}/g, '\\')}`);

// multiple escaped
console.log(`multiple escaped ${`C:\\\\\\\\backup\\\\`
  .replace(/\\{2,}/g, '\\')}`);

// don't want to replace the last \\
console.log(`not the last ${`C:\\\\\\backup\\\\`
  .replace(/\\{2,}([^\\{2,}$])/g, (a ,b) => a.slice(0,1) + b)}` );

// don't want to replace the first \\
console.log(`not the first ${`C:\\\\backup\\`.replace(/\\[^\\]$/g, '\\')}`);

// a generic tagged template to replace all multiple \\ OR //
const toSingleSlashes = (strs, ...args) => 
  strs.reduce( (a, v, i ) => 
    a.concat(args[i-1] || ``).concat(v, ``), `` )
      .replace( /(\\|\/){2,}/g, (a, b) => b );

console.log(`generic tagged template 1 ${
  toSingleSlashes`C:\\backup\\`}`);

console.log(`generic tagged template 2 ${
  toSingleSlashes`C:\\\\\\\\backup\\\\\\\\\\`}`);
  
console.log(`generic tagged template 3 ${
  toSingleSlashes`C:\\\\\\\\backup\\`}`);
  
console.log(`generic tagged template 4 ${
  toSingleSlashes`C:////////backup////`}`);

console.log(`reply to comment @chitgoks => 
"test\\\\hehehe" is by default "test\\hehehe"
so, no replacement necessary here ...`);
.as-console-wrapper {
    max-height: 100% !important;
}

regex를 사용하여 모든 항목을 바꾸는 것이 가장 좋습니다.

C:\\backup\\".replace(/\/\//g, "/")[0]

다음과 같이 반환됩니다.C:\backup\

OR

스플릿을 사용하다

"C:\\backup\\".split();

둘 다 원하는 결과를 생성합니다.

C:\백업\

console.log("using \"C:\\backup\\\".replace(/\/\//g, \"/\")")
console.log("C:\\backup\\".replace(/\/\//g, "/"));

console.log("Using \"C:\\backup\\\".split()");
console.log("C:\\backup\\".split()[0]);

모든 사람들이 자신을 오해하고 있을 수도 있다고 생각합니다.console.log()문자 교체 여부에 관계없이 자동으로 예상 결과가 표시됩니다.

const test = 'C:\\';
console.log( test ) // this will write out "C:\"
console.log( `${ test.replace( /\\{2,}/g, '\\' }` ) // this will also write out "C:\"

문자열 값이 여전히 이스케이프된 단일 문자입니다.하지만, 그console.log당신에게 그 사실을 숨기는 것입니다.

제가 볼 때, 실제로 그것을 대체할 방법은 없습니다.\\와 함께\자바스크립트로

당신이 얻을 수 있는 가장 가까운 것은 이와 같은 것을 하는 것일 것입니다, 하지만 여전히 같은 방식으로 해석됩니다.

test.replace( /\\{2,}/g, '\u005C' )

언급URL : https://stackoverflow.com/questions/25304214/replace-double-backslashes-with-a-single-backslash-in-javascript

반응형