2022/01/06) 3. 数値のみ抽出[検索文字列]


1.質問
<数値のみ抽出>
:文字と数字が混在する文字列が指定されている場合は、その中の数字のみを抽出し、自然数を順番に生成します.「tag 0 a 12 h 205 er」からのみ数字を抽出すると、0、1、2、0、5となり、自然数として1205となる.
2.解決方法
  • 第1の方法:前に学んだ正規表現で解決してもよいし、Askyコードで解決してもよい.
  • 第2の方法:isNaN(Not a Number)法を用いて解決してもよい.数字であればfalseが現れ、数字でなければtrueが現れます.
    もう1つの数字(x)を加えると、タイプを数字タイプに変えるようです.
  • 3.正解
            <script>
                function solution(str){
                    let answer="";
                    for(let x of str){
                        if(!isNaN(x)) answer+=x;
                    }  
                    return parseInt(answer);
                }       
                let str="g0en2T0s8eSoft";
                console.log(solution(str));
            </script>
            <script>   //만약 parseInt()를 쓰지 말라고 할 경우.
                function solution(str){ 
                    let answer =0;
                    for(let x of str){
                        if(! isNaN(x)) answer = answer * 10 + Number(x)
                    }
                    return answer;
                }
                let str="g0en2T0s8eSoft";
                console.log(solution(str));
            </script>
            <script>   //아스키코드로 한 건데 왜 안되지... 틀린 거 없는 거 같은데 ㅜㅜ엉엉
                function solution(str){
                    //for..of 로 해서, 하나로 바꾼 후 아스키코드 이용해서 추출해도 되겠다
                    let answer;
                    let s = str.toUpperCase(); //1. 대문자로 변경 
                    for(let x of s){
                        let num = x.charCodeAt(); //2. 유니코드로 변경. 대문자로 변경했으므로 65~90에 포함되지 않는 것들 추출
                        if( !(num >= 65 && num <= 90) ) answer += x;
                    }
                    return parseInt(answer);
                }
                let str="g0en2T0s8eSoft";
                console.log(solution(str));
            </script>
    4.私のコードとの比較と反省
    このバカはサキだ!!どうして正規表現を//ではなくと書いたのか、そして「」!!replace("[^]",")はははは本当に気が狂いそうだ.でも上手なところはいろいろ試してみました…?しかし、まだ知らないことがたくさんあります.replaceで文字を「」に変える以外に、正規表現で数字を抽出して値を作成するだけのものはありませんか...?