2012-11-24 2 views
0

내용이라는 단어 뒤에 주어진 문자열 내에서 이중 백 슬래시 "\\"를 바꿀 수있는 방법은 백 슬래시 하나만 사용하는 것입니다. 내가 성공하지 않고 다음과 같은 노력JS 단어 뒤의 백 슬래시 교체

var a = "blah blah \\ \\ content:\"whiskey \\"; 

:로

var a = "blah blah \\ \\ content:\"whiskey \\\\"; 

은 그래서 표시됩니다.

a.replace(/content:*\\\\\"/g, "\\")); 

답변

3

정규 표현식으로 전체 문제를 해결하기보다는 "컨텐츠"에서 문자열을 분리하고 오른쪽 절반에서 대체합니다.

function fn(x) { 
    var i = x.indexOf("content"); 
    return x.substr(0,i) + x.substr(i).replace(/\\\\/g, "\\"); 
} 

// this evaluates true 
fn("blah blah \\ \\ \\\\ content:\"whiskey \\\\\\\\ \\\\") == 
    "blah blah \\ \\ \\\\ content:\"whiskey \\\\ \\" 
+0

이것이 올바른 대답이라고 생각합니다. 불행히도 정규 표현식이 항상 해결책은 아닙니다. : – Xymostech

+0

Christopher, 더 간단하기 때문에 문자열을 분할하는 것이 옹호됩니까? –

+0

문자열을 나누는 것이 더 좋습니다. – Xymostech

1
a.replace(/(content:.*)\\\\/g, "$1\\"); 

특히 문제, 당신은 당신의 정규식에 "했다, 당신은 아무것도 일치 .* 필요하고, 나중에 검색 할 수 있도록 당신은 첫 번째 부분 주위에 그룹을 넣어해야합니다.

자바 스크립트가 일치하는 방식 때문에 모든 대체 작업이 완료 될 때까지이 작업을 여러 번 실행해야합니다.

+0

. 모든 교체 작업을 수행하기 위해 실행하는지 확인하는 가장 좋은 방법은 무엇입니까? –

+0

절대적으로 생각할 필요가 없습니다. 이 특정 경우에 문자열이 변경 될 때까지 계속 바꾸거나 문자열 길이가 줄지 않을 때까지 기다릴 수 있습니다. – Xymostech

0

대체 방법없이 사용하십시오!

a.split('\\\\').join('\\'); 

그리고 결과가 마땅한 :

이 여러 번 실행해야한다는 흥미로운
blah blah \ \ content:"whiskey \ 
+0

그건 ... 그들이 원하는 바가 아니야 – Xymostech

+0

두 개의 백 슬래시를 하나의 백 슬래시로 바꾸려면 그는 말합니다. 그래서 나는 내가 아는 것을 줄 것입니다. – faid

+0

그는 "주어진 문자열 내에서 ** 'content'** '라는 단어.'content '라는 단어 앞에서도 당신의 단어가 대체됩니다. – Xymostech