javascript
  • regex
  • double-quotes
  • backslash
  • 2016-09-20 3 views 0 likes 
    0

    , 나는 아래의 원래 문자열 원하는 :Javascript (Regex) : (백 슬래시 + 큰 따옴표) 쌍을 어떻게 바꿉니 까? 자바 스크립트에서

    내가 \ "이 \"단어를 "\"및 \를 대체 할 수 있지만 "여기"

    사람을 .. 나는 ^이 ^과^^ 단어지만, "여기"NOT 사람이

    내가 시도하는 것이 뭔가 대체 할

    :처럼되기 위해 g like :

    var str = 'I want to replace \"this\" and \"that\" words, but NOT the one "here"'; 
    str = str.replace(/\"/g,"^"); 
    console.log(str); 
    

    데모 : JSFiddle here.

    하지만 여전히 .. 출력은 다음과 같습니다

    내가 대체 할 ^이 ^과^^ 단어,하지만 안 하나는^여기^

    내가 원하는 어떤 의미하는 것이 \" 발생 만 대체하지만 "은 발생하지 않습니다. 하지만 나는 못해.

    도와주세요.

    +2

    'var str ='을 시작하는 코드 행은 백 슬래시가없는 문자열을 만듭니다. 문자열 리터럴에서 결과 문자열에 백 슬래시를 포함 시키려면'var str = 'I ... \\ "this \\"and ...''와 같이 이스케이프 처리해야합니다. 정규식에서 백 슬래시도 벗어나야합니다. – nnnnnn

    +0

    ^문자열 리터럴의 이스케이프 문자는 이스케이프 문자로 처리됩니다. -> https://jsfiddle.net/adeneo/ddst9ok2/ – adeneo

    +0

    예 .. JS에서 어떻게 구현합니까? –

    답변

    2

    @ adeneo 님의 의견대로, 귀하의 문자열이 잘못 작성되어 귀하의 기대치와 정확하게 일치하지 않습니다. 이것을 시도하십시오 :

    var str = 'I want to replace \\"this\\" and \\"that\\" words, but not the one "here"'; 
    str = str.replace(/\\\"/g,"^"); 
    console.log(str); 
    
    +1

    정규식에서'''를 이스케이프 할 필요는 없습니다. – nnnnnn

    1

    당신은 일치하는 문자가 입력 문자열에서 마지막 경기에 마지막에서 두 번째 또는인지 확인합니다 RegExp/(")/, String.prototype.lastIndexOf(), String.prototype.slice()를 사용할 수 있습니다. true 인 경우 원본 일치 항목을 반환하고 그렇지 않으면 "^" 문자로 일치 항목을 바꾸십시오.

    +1

    당신은 OP에 의해 주어진 문자열을 정확하게 표현하고 있지 않습니다. JS에서 문자열 리터럴로 재현하려면'\\ "를 써야 할 것입니다. –

    +0

    이 솔루션은 복잡합니다! 더 쉽게 구현할 수 있습니다 – Benjamin

    +2

    이 경우 일치하지 않는 문자열은 항상 끝에 있습니다 (OP는 그 의미에 대해 혼란 스럽긴하지만) 백 슬래시와 일치하는 OP의 요구 사항을 무시합니다. – nnnnnn

    0

    String.prototype.replace의 문제

    var str = `I want to replace \"this\" and \"that\" words, but NOT the one "here"`; 
     
    
     
    var res = str.replace(/(")/g, function(match, _, index) { 
     
        return index === str.lastIndexOf(match) 
     
         || index === str.slice(0, str.lastIndexOf(match) -1) 
     
             .lastIndexOf(match) 
     
         ? match 
     
         : "^" 
     
    }); 
     
    console.log(res);

    는 단지 정규 표현식없이 첫 번째 항목을 대체한다는 것이다. 이 문제를 해결하려면, 당신은 너무처럼 g과 정규식의 끝을 추가해야

    var mod = str => str.replace(/\\\"/g,'^'); 
    mod('I want to replace \\"this\\" and \\"that\\" words, but NOT the one "here"'); 
    

    덜 효과적인하지만 쉽게 당신이 원하는 것을 할 이해 조인 다음 구분 기호로 문자열을 분할하고

    var mod = str => str.split('\\"').join('^'); 
    mod('I want to replace \\"this\\" and \\"that\\" words, but NOT the one "here"'); 
    

    참고 : ". 당신의 문자열이 포함되어 있다고 가정"당신은 하나 '또는 문자열을 포장 수, 즉 "는, 당신은 앞에서 \를 넣어해야합니다과 같이 교체와 그것을 ""a"a" 구문 오류가 발생합니다. 'a"a'은 구문 분석 오류가 발생하지 않습니다. 파서는 "문자열의 일부이지만 앞에 \를 붙이면"또는 다른 특수 문자를 인식하므로 다음 문자가 특수 문자임을 의미합니다. 따라서 'a\"a' === 'a"a' === "a\"a". \를 저장하려면 사용하는 견적 유형에 상관없이 \를 사용해야하므로 \ "를 저장하려면 '\\"', '\\\"' 또는 "\\\""을 사용해야합니다.

    +0

    '\ "와''사이의 정규 표현식의 차이점은 무엇입니까? ", 도주하지 않고? –

    +0

    이 코드 단편은 질문을 해결할 수 있지만 [설명 포함] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)은 게시물의 품질을 향상시키는 데 정말로 도움이됩니다. 앞으로 독자의 질문에 답하고 있으며 코드 제안의 이유를 알지 못할 수도 있습니다. –

     관련 문제

    • 관련 문제 없음^_^