2017-12-27 4 views
0

문장 문자열과 참/거짓 '외치는'인수를받는 함수를 작성해야합니다. 물음표를 느낌표로 바꾸거나 그 반대로 문자열을 반환해야합니다. 'shouting'이 true이면 모든 문자는 대문자 여야합니다. 내가 안녕을 변환 할 때물음표를 느낌표로 바꾸거나 그 반대로 바꾸기

function changeIntonation(str, isShouting) { 
let myString = ''; 
let regExcl = /\!/; 
let regQmark = /\?/; 

let qMarkStr = str.replace(regQmark, '!'); 
let finalStr = qMarkStr.replace(regExcl, '?'); 

let newArr = finalStr.split(''); 

if(isShouting === true) { 
    let upperCaseArr = newArr.map(function(char){ 
    return char.toUpperCase(); 
    }) 
    myString = upperCaseArr.join(''); 
} 
return myString; 

은}

내 코드는 작동한다! 잘 지냈어요? ~ 안녕하세요? 안녕하세요.,하지만 시험 할 때 안녕하세요? 잘 지냈어요? 그냥 대문자로 만들고 느낌표와 물음표는 변경되지 않습니다. !? ~ ?!이 실패합니다. 아이디어가 있으십니까? 고맙습니다.

+1

실패한 예제에서 코드를 실행할 때'qMarkStr'이 어떻게 설정되어 있는지 생각해보십시오. – Phylogenesis

+1

당신은 설명에 대한 질문을 전환하고 질문에 대한 설명을 되돌려 놓습니다 ... 당신은 그것을 바꾸고 있습니다. 이 변환을 수행하려면 약간의 논리가 필요합니다. – brso05

+0

이미 교체 된 경우 다시 교체하지 마십시오 ... – brso05

답변

2

문제는을 가지고, 원래 !? 존재하는 . 또한

let finalStr = str.replace(/[!?]/g, function(c) { return c === '?' ? '!' : '?'; }); 

당신은, 당신이 사용할 수있는 각 문자에 .toUpperCase()를 호출 할 필요가 없습니다

은 ( using a function argument on String#replace())처럼 하나의 명령에 !?를 교체해야, 그 해결하려면 문자열 :

function changeIntonation(str, isShouting) { 
 
    let finalStr = str.replace(/[!?]/g, function(c) { return c === '?' ? '!' : '?'; }); 
 

 
    if (isShouting === true) { 
 
    return finalStr.toUpperCase(); 
 
    } else { 
 
    return finalStr; 
 
    } 
 
} 
 
console.log(changeIntonation("Hey! How are you?", true)); 
 
console.log(changeIntonation("Hey! How are you?", false)); 
 
console.log(changeIntonation("Hey? How are you!", true)); 
 
console.log(changeIntonation("Hey? How are you!", false));

+0

좋은 답변입니다! IMO 대체를 위해 3 진 성명서를 사용하려는 경우 isShouting에도 사용할 수 있습니다! :) – zfrisch

+2

@zfrisch가 동의했습니다! 코드가 제 것이면 아마 그것을했을 것입니다.나는 보통 질문의 원래 스 니펫 (snippet)에서 가능한 한 코드를 변경하려고하기 때문에 이번에는하지 않았다. 때로는 영업 사원이 변경된 사항과 변경되지 않은 사항을 파악하는 데 어려움을 겪을 수 있습니다. – acdcjunior

+0

아, 이제 이해합니다! 설명을 주셔서 감사합니다 :) – squeekyDave

1

두 문자를 동시에 교체해야합니다.

당신이 다음!?, 당신은 실수로 교체 할 위험이 대체 ?!을 교체 할 때 살펴 HERE (두 번째 예)

1

덕분에 @acdcj하기 unior, 누가 나 앞에서 대답했다. 그리고 나는 그가 벌써 대답했다는 것을 알아 채지 못했다. 내 코드는 그의 코드처럼 보이지만 조금 더 작습니다.

function changeIntonation(str, isShouting) { 
    str = str.replace(/\?|\!/g, function(match) { 
     return match == "?" ? "!" : "?"; 
    }); 
    return isShouting ? str.toUpperCase() : str; 
} 

우선 나는 하나의 문자를 대문자로 만들어 전체 문자열에 모두 결합하는 것으로 나타났습니다. 왜? 방금 대문자로 된 문자열을 만들었습니다.
그렇다면 물음표를 물음표로 대체 할 때 물음표를 물음표로 바꾸면 감탄 부호가 느낌표가되므로 물음표로 느낌표를 바꾸려면 모두 바꾸어야한다는 것을 이해했습니다. 그래서 콜백을 질문과 느낌표로 교체하고 올바르게 대체 할 하나 또는 다른 것이 콜백에 체크인했는지 확인합니다.

관련 문제