Simple Pig Latin

SungJunEun·2021년 11월 2일
0

Codewars 문제풀이

목록 보기
6/26
post-thumbnail

Description:

Move the first letter of each word to the end of it, then add "ay" to the end of the word. Leave punctuation marks untouched.

Examples

pigIt('Pig latin is cool');// igPay atinlay siay oolcay
pigIt('Hello world !');// elloHay orldway !

My solution:

function pigIt(str){
  regexp = /\w*/g;
  const replacement = str.replace(regexp,function(match) {
    if(!match) {
      return match;
    }
    else {
      let newWord = match.slice(1)+match[0]+'ay';
      return newWord;
    }

  });
  return replacement;
}

Best solutions:

function pigIt(str) {
  return str.replace(/\w+/g, (w) => {
    return w.slice(1) + w[0] + 'ay';
  });
}
  • 정규표현식 * vs +
    • * : 해당 패턴이 없거나 있는 경우를 전부 반환
    • + : 해당 패턴이 최소 하나있을 때를 반환
  • 정규표현식 g 매칭되는 문자 전부를 반환


function pigIt(str){
  return str.replace(/(\w)(\w*)(\s|$)/g, "\$2\$1ay\$3")
}
  • 정규표현식에서의 $ 문자열의 끝
  • 정규표현식에서의 () ()로 묶으면 ()끼리 묶인 것끼리 하나의 그룹으로 묶인다.

    Example

    var re = /(\w+)\s(\w+)/;

    var str = 'John Smith';

    str.replace(re, '$2, $1'); // "Smith, John"

    RegExp.$1; // "John"
    RegExp.$2; // "Smith"

해당 코드에서 첫번째 괄호에는 'John', 그리고 두번째 괄호에는 'Smith'가 들어가서 이것들이 $index로 호출이 가능해진다.


원래의 솔루션에서 str에 'This was pig'을 제공하면,

  1. 첫번째 그룹에서는 T, his, _(공백)이 하나로 묶인다. $1은 T, $2는 his, $3은 _이다.
  2. 두번째 그룹에서는 w, as, _이 묶인다. $1은 w, $2는 as, $3은 _이다.
  3. 세번쨰 그룹에서는 p, ig, _(문자열의 끝)이 묶인다. $1은 p, $2는 ig, $3은 _이다.
profile
블록체인 개발자(진)

0개의 댓글