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"
. \를 저장하려면 사용하는 견적 유형에 상관없이 \를 사용해야하므로 \ "를 저장하려면 '\\"'
, '\\\"'
또는 "\\\""
을 사용해야합니다.
'var str ='을 시작하는 코드 행은 백 슬래시가없는 문자열을 만듭니다. 문자열 리터럴에서 결과 문자열에 백 슬래시를 포함 시키려면'var str = 'I ... \\ "this \\"and ...''와 같이 이스케이프 처리해야합니다. 정규식에서 백 슬래시도 벗어나야합니다. – nnnnnn
^문자열 리터럴의 이스케이프 문자는 이스케이프 문자로 처리됩니다. -> https://jsfiddle.net/adeneo/ddst9ok2/ – adeneo
예 .. JS에서 어떻게 구현합니까? –