質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

1223閲覧

【JS】行頭から続く半角スペースを数える

ymymymymy

総合スコア9

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2022/12/11 06:32

【JavaScript】行頭から続く半角スペースを数える

行頭から続く半角スペースの数を数える処理を作りたいのですが,どうすればいいのかわかりません.

js

1let text1 = " hoge"; // hogeの前に半角スペースが4つある 2let text2 = " hoge "; // hogeの前と後に半角スペースが2つある 3 4function countSpace(text) { 5 let count = 0; 6 // 半角スペースの数を数える処理 7 return count; 8} 9 10console.log(countSpace(text1)); // 出力結果-> 4 11console.log(countSpace(text2)); // 出力結果-> 2 12

試したこと

js

1function countSpace(text) { 2 let count = 0; 3 count = (text.match(/ /g) || []).length; 4 return count; 5}

↑の場合,text2を実行時に本当なら2が返されなければならないところ,4が返されました。

どうすればいいかわかりません.
よろしくお願い致します.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

どうすればいいかわかりません.

まずは、手作業でやるとしたらどうするかを考えて、それをコードに起こしてみましょう。

投稿2022/12/11 06:48

maisumakun

総合スコア145201

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2022/12/11 07:13

機械学習のような「データで勝負をかける」ものは別として、何をどうするか順序立てて言葉に出来ないようでは、コードにもできません。
guest

0

JavaScript

1text.match(/^ */)[0].length

「先頭の0個以上の空白」は必ずあるので、見つからないことを考慮しなくて良いです、

投稿2022/12/11 09:59

otn

総合スコア84667

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

不具合の原因

単純にスペースで照合をかけているので、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:07

編集2022/12/11 07:31
Cocode

総合スコア2314

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問