Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript에서 문자열의 모음은 대문자로, 알파벳은 다음 문자(z→a)로 변환하는 프로그램

문자열을 유일한 입력값으로 받아 새로운 문자열을 반환하는 JavaScript 함수를 작성해야 합니다. 이 함수는 입력 문자열을 기반으로 다음 두 가지 규칙을 적용한 결과를 만들어야 합니다.

  • 모든 모음(a, e, i, o, u)은 대문자로 변환합니다.
  • 나머지 알파벳 소문자는 각각 알파벳 순서상 다음 문자로 바꾸며, z는 a로 순환시킵니다.

예를 들어 입력 문자열이 다음과 같다면,

const str = 'newString';

출력 결과는 아래와 같아야 합니다.

const output = 'oExSusIoh';

입력 문자열 'newString'에서 n은 o로, e는 대문자 E로, w는 x로 변환되는 방식입니다. 이미 대문자였던 S는 그대로 유지되는 점도 확인할 수 있습니다.

구현 코드

const str = 'newString';
const capitalizeAndMove = (str = '') => {
    let s = '';
    s = str.replace(/[a-z]/g, function(c) {
        return 'aeiou'.indexOf(c) > -1
            ? c.toUpperCase()
            : String.fromCharCode(Math.max(c.charCodeAt(0) % 122 + 1, 97));
    });
    return s;
};
console.log(capitalizeAndMove(str));

코드 동작 원리

  • /[a-z]/g 정규 표현식: 문자열 내의 모든 영어 소문자를 찾아냅니다. g(global) 플래그 덕분에 일치하는 모든 문자가 한 번에 처리됩니다.
  • 모음 여부 판별: replace 콜백 함수 안에서 'aeiou'.indexOf(c)의 값이 -1보다 크면 해당 문자가 모음이라는 의미이므로, toUpperCase()로 대문자를 반환합니다.
  • 다음 문자 계산: 자음인 경우에는 charCodeAt(0)으로 문자 코드를 구한 뒤, 122(즉 'z')로 나눈 나머지에 1을 더해 다음 문자의 코드를 얻습니다.
  • z → a 순환 처리: 'z'(코드 122)는 122 % 122 = 0이 되기 때문에, Math.max(..., 97)가 이 값을 97(즉 'a')로 보정하여 알파벳이 처음으로 순환되도록 합니다.
  • 대문자 및 기타 문자 유지: 정규 표현식이 소문자 범위만 검사하므로, 이미 대문자인 알파벳(S 등)은 물론 숫자, 공백, 특수 문자도 변환 없이 그대로 남게 됩니다.

실행 결과

코드를 실행하면 콘솔에 다음과 같이 출력됩니다.

oExSusIoh