概要
checkioの「First Words」の問題を解いていて気になったことがあったので質問させていただきます。
問題)文字列から先頭の単語を返す
ただし…
・文字列がピリオドやコンマを含むかもしれない
・アポストロフィーは単語の一部として捉える
・文字列がピリオドやスペースで始まる場合もある
例)
"Hello world" -> Hello
" a word " -> a
"... and so on ..." -> and
split()を使う
お決まりのsplitで文字列を区切ってその先頭の単語を返そう!と思い、早速下記の通りに書いてみました。
しかし、"... and so on ..." の場合に期待した値が返って来ません。
JavaScript
1function firstWord(text) { 2 // your code here 3 var split_str = text.split(/[\s|,|.]/); 4 return split_str[0]; 5} 6console.log(firstWord("Hello,World")); //Hello 7console.log(firstWord("Hello World")); //Hello 8console.log(firstWord("don't touch it")); //don't 9console.log(firstWord("... and so on ...")); // (何も表示されず…)
match()を使う
しかし、match()を使うと期待通りの値が返ってきました!
JavaScript
1function firstWord(text) { 2 // your code here 3 var split_str = text.match(/[a-zA-Z0-9']+/g); 4 return split_str[0]; 5} 6console.log(firstWord("Hello,World")); //Hello 7console.log(firstWord("Hello World")); //Hello 8console.log(firstWord("don't touch it")); //don't 9console.log(firstWord("... and so on ...")); //and
疑問点
ここで一つ疑問なのですが、ピリオドや空文字はエスケープする必要があるメタ文字という認識でいるので
split()を使うやり方でバックスラッシュを用いて指定したはずですが、
どうしてエスケープされてなかったのでしょうか?
よろしければ、split()を使ってこの問題を解くならどうしたらよいか教えてくださると幸いです。
###参考にしたサイト
文字列の分割(split)について:https://programmercollege.jp/column/7649/
JavaScriptで文字列を検索する方法(match):https://uxmilk.jp/23757
回答3件
あなたの回答
tips
プレビュー