프로그래머스 옹알이(1) 자바스크립트 | String.prototype.match(), RegExp.prototype.test()

Chaeyeon Lee·2023년 5월 25일
0

🔅 1. 아이디어

우선 조카가 할 수 있는 말을 배열로 저장해둔다.
babbling을 forEach로 순회함.
각 원소 e는 임시 변수 t에 저장이 되고, 각 원소 e에 조카가 할 수 있는 단어가 있는지 includes로 판별.
있다면 t에서 말할 수 있는 단어는 'T'로 교체됨.
왜 T로 교체하냐면, t에서 T를 replace로 없애버렸을 때, t의 길이가 0이라면 조카가 할 수 있는 말이 1개 이상임을 의미하기 때문.


🧑‍💻 2. 내 코드

function solution(babbling) {
    let peut=["aya", "ye", "woo", "ma"];
    let ans=0;
    
    babbling.forEach((e)=>{
        let t=e;
        for(let i in peut){
            if(e.includes(peut[i])) {
                t=t.replace(peut[i], 'T');
            }
        }
        t=t.replace(/T/g, "");
            
        t.length===0 ? ans+=1 : ans+=0;
    });
    
    return ans;
}

프로그래머스 코딩테스트 입문이라며... 0레벨이라며...
아이디어를 짜는 데에는 크게 안 걸렸는데, 문법 오류인지 아니면 내 이해 부족인지 때문에 한 40분은 넘게 씨름한 것 같다.
특히 let t=e로 설정하지 않고, 바로 e를 replace하려고 해서 많이 오류가 났다.


다른 사람 풀이

function solution(babbling) {
  var answer = 0;
  const regex = /^(aya|ye|woo|ma)+$/;

babbling.forEach(word => {
if (regex.test(word)) answer++;
})

return answer;
}

정규식 한 번 더 보고 가야겠다...

# 🐣 3. 개념
## 📌 String.prototype.match()
위 메서드는 문자열이 정규식과 매치 되는 부분을 검색한다. 문자열이 정규식과 일치하면, 일치하는 전체 문자열을 첫 번째 요소로 포함하는 Array를 반환한 다음, 괄호 안에 캡처된 결과가 나온다. 일치하는 것이 없으면 null

	str.match(regexp)
    
## 📌 RegExp.prototype.test()
위 메서드는 주어진 문자열이 정규 표현식을 만족하는지 판별하고 그 여부를 true or false로 반환
```javascript
const str = 'table football';

const regex = new RegExp('foo*');
const globalRegex = new RegExp('foo*', 'g');

console.log(regex.test(str));
// Expected output: true

console.log(globalRegex.lastIndex);
// Expected output: 0

console.log(globalRegex.test(str));
// Expected output: true

console.log(globalRegex.lastIndex);
// Expected output: 9

console.log(globalRegex.test(str));
// Expected output: false

나는 왜 이렇게 정규식이 어려울까...? 적재적소에 활용하려면 외우고 있어야 해서 그런가? 언젠간 외우긴 해야겠지...그치만 우선은 많이 접해놓고, 나중에 정규식을 활용할 수 있다는 것만 떠올려서 검색이 가능하게끔은 해놔야겠다.

const str = 'hello world!';
const result = /^hello/.test(str);

console.log(result); // true
profile
프론트엔드 개발자 지망생

0개의 댓글