不具合の原因
単純にスペースで照合をかけているので、text2ではhogeの後のスペースも含まれてしまっています。
開始のスペースだけにマッチさせるようにする必要があります。
コード例1
javascript
1const text1 = " hoge"; // hogeの前に半角スペースが4つある
2const text2 = " hoge "; // hogeの前と後に半角スペースが2つある
3const text3 = "hoge "; // 開始に半角スペースがない
4
5const countSpace = text => (text.split(text.trim())[0].match(/ /g) || []).length;
6
7console.log(countSpace(text1)); // 出力結果-> 4
8console.log(countSpace(text2)); // 出力結果-> 2
9console.log(countSpace(text3)); // 出力結果-> 0
上記のコードをtext2を例にとって解説していいきます。
.split(text.trim())
は、つまり.split('hoge')
ということです。
' hoge '
を→['スペースx2', 'スペースx2']
という配列に変換します。
- 開始のスペースだけカウントしたいのですから、配列の[0]番目が欲しいので
['スペースx2', 'スペースx2'][0]
という形で指定しています。
['スペースx2'].match(/ /g)
で半角スペースをマッチさせます。
- マッチするものがなければ
|| []
で長さ0の配列にします。
- matchによって出来上がった配列を、
['スペースx1', 'スペースx1'].length
で、スペースの数を数えます。
ちなみに、半角スペースと全角スペースを区別する必要がなければ、もっと短く済みます。
javascript
1const countSpace = text => text.split(text.trim())[0].length;
コード例2
javascript
1const text1 = " hoge"; // hogeの前に半角スペースが4つある
2const text2 = " hoge "; // hogeの前と後に半角スペースが2つある
3const text3 = "hoge "; // 開始に半角スペースがない
4
5const countSpace = text => (text.match(/^ +/) || [])[0].length;
6
7console.log(countSpace(text1)); // 出力結果-> 4
8console.log(countSpace(text2)); // 出力結果-> 2
9console.log(countSpace(text3)); // 出力結果-> 0
/^ +/
半角スペースから開始し、1つまたはそれ以上のスペースの連続をマッチさせる。
- マッチしない場合は
|| []
により、長さが0の配列にする。
- 配列の中の[0]番目の文字列の長さを取得する。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/11 07:13