2016-09-03 3 views
0

정확하게 구술하는 방법을 모르겠습니다. 난 할 노력하고있어 것은 String.raw의 역 효과적으로JavaScript에서 문자를 수동으로 이스케이프 처리하는 방법

console.log(magicStringFunction('\\n') === '\n') // true 

입니다 : 기본적으로, 백 슬래시 한는 "이스케이프 가능한"문자로 구성된 문자열을 실제 탈출 형태로 변환 할

console.log(String.raw`\n` === '\\n') // true 

나는 내가 기술적으로 eval이 할 수 있다는 것을 알고 :

console.log(eval('"\\n"')); // \n 

그러나, 나는 일반적으로 평가를 사용하지 않는 것을 좋아합니다. 네이티브 코드로이 작업을 수행 할 수있는 방법이 있습니까?

답변

0

답변을 찾았습니다! 질문을하기 전에 조사를 좀 더해야한다는 것을 보여주기 위해갑니다 ...

이 경우 eval과 비슷하지만 더 위험하지 않으며 (그럴 것 같습니다) 더 빨리 사용할 수 있습니다.

console.log(JSON.parse('"\\n"') === '\n') // true 
+0

오, 난 당신에 대해 얘기했다 생각 오토마타 이론 및 컴파일러 설계에서와 마찬가지로 Javascript에 대한 구문 분석을 개발합니다. –

+0

닫기, 그러나 큰 따옴표'''가 전달 될 때 해결책이 깨집니다. –

+0

''\\ v "'를 구문 분석하려고 할 때 작동하지 않는 것 같습니다. "r", "n", "t", "v", "f"및 "b"에 대해이 작업을 원한다면 지금은'char === 'v'? '에 정착하고 있습니다. \ v ': JSON.parse (' "\\ '+ char +'" ')' – jchitel

0

이 제안한 솔루션 중 하나입니다

function magicStringFunction(w){ 
    return JSON.parse('"' + w + '"'); 
} 

그러나이 경우는 실패합니다

magicStringFunction('"\\n"');  // whoops 

이런 일이 발생을 방지 버전 :

function magicStringFunction(w){ 
    return w.replace(/\\./g, function(match){ 
     return JSON.parse('"' + match + '"'); 
    }); 
} 

매우 효율적일 수는 없지만 제대로 작동 할 수도 있습니다.


아니면 효율 JSON.parse의 큰 팬이 아닌 경우, 대신이 작업을 수행 할 수 있습니다

function magicStringFunction(w){ 
    // Defined by Table 34 under section 11.8.4.3 
    // ' " \ b f n r t v 
    var escCharMap = { 
     "\\'": "'", 
     "\\\"": "\"", 
     "\\\\": "\\", 
     "\\b": "\b", 
     "\\f": "\f", 
     "\\n": "\n", 
     "\\r": "\r", 
     "\\t": "\t", 
     "\\v": "\v" 
    }; 

    return w.replace(/\\./g, function(match){ 
     if(escCharMap.hasOwnProperty(match)) return escCharMap[match]; 
     else         return match.substr(1, 1); 
    }); 
} 

참조 : http://www.ecma-international.org/ecma-262/7.0/index.html#prod-SingleEscapeCharacter

관련 문제