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

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

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

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

正規表現

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

Q&A

解決済

3回答

482閲覧

Javascriptの正規表現について

itzuakniami123

総合スコア74

JavaScript

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

正規表現

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

1グッド

1クリップ

投稿2020/06/18 05:32

split()で正規表現を指定する際にうまく動かず苦戦しています…。

区切り文字としたいもの:カンマ・ピリオド・空白スペース・その他記号
英数字だけを抽出してリストで返したいです。

該当のソースコード・試したこと

function a(text) { // your code here var str = text.split(/^[!-/:-@¥[-`{-~]+$/); return str; } console.log(a("... a bc defg ...")); //上記のソートコードで出力される結果[ '... a bc defg ...' ] //期待する結果 //['a','bc','defg']

参考にしたサイト

正規表現パターンサンプル集
他にもたくさんのサイトを見て調べましたが、あまりしっくりこなかったもので…。
何卒宜しくお願い致します。

KojiDoi👍を押しています

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

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

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

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

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

guest

回答3

0

ベストアンサー

['a','bc','defg'] というように、英数字だけを抽出したものをリスト化したい

つまり、

「英数字以外の文字が一文字繰り返されているパターン」に合致する文字列をセパレーターにしたい

ということだと解釈できます。

var str = text.split(/[^a-zA-Z0-9]+/);

追記

よく考えたら、そもそもsplitという発想が不要なのでは…。

a="... a bc defg ..." console.log(a.match(/[a-zA-Z0-9]+/g))

投稿2020/06/18 06:00

編集2020/06/18 06:46
KojiDoi

総合スコア13671

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

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

itzuakniami123

2020/06/18 06:08

ご回答ありがとうございます! 確かに、それは逆の発想ですね。 取り除きたい条件だけが頭から離れずにいました…。 ただ、ご指摘の通り動かしてみたのですが、「...」もカウントしてしまって [ '', 'a', 'bc', 'defg', '' ] という結果になってしまいました…。
KojiDoi

2020/06/18 06:49

別回答を追記しました。 > [ '', 'a', 'bc', 'defg', '' ] という結果になってしまいました…。 その結果はセパレータに当たるものが対象文字列の端に存在しているからですね。この方針で行くなら、結果の空文字要素は無視、事前に対象文字列の端にある邪魔な文字列を削除しておくなどの工夫が必要ですね。
itzuakniami123

2020/06/18 06:55

追記ありがとうございます! セパレータに当たるものが対象文字列の端に存在しているからうまくいかなかったんですね…。ベストアンサーとさせていただきます!
guest

0

splitに与える正規表現の両端に^$が付いていますが、これらは文字列の両端でしかヒットしないものなので、区切り文字として指定する場合には不適当です。

投稿2020/06/18 05:34

maisumakun

総合スコア145183

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

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

itzuakniami123

2020/06/18 05:44

文字列の両端でしかヒットしないんですね…! 全ての文字列を調べる必要があるので、上記のソースコードでは上手く動いてくれなかったんですね…。 ちなみにご指摘があったのを変更して var str = text.split(/[!-/:-@¥[-`{-~]/);にしたところ [ '', '', '', ' a bc defg ', '', '', '' ] という結果が返ってきてしまいました。 スペースも取り除きたい場合はどうしたらよいでしょうか?
maisumakun

2020/06/18 05:46

具体的に、どのような配列の返り値を期待していますか?
itzuakniami123

2020/06/18 05:49 編集

期待する返り値は "... a bc defg ..." と入力されたら ['a','bc','defg'] というように、英数字だけを抽出したものをリスト化したいです…!
guest

0

「区切り文字としたいもの:カンマ・ピリオド・空白スペース・その他記号」
ならそれは区切り記号として扱うべきだと思います。
空の値が混じった配列に「英数字だけにしたい」を抽出するのはmapとかで配列操作をすればいいのでは?

投稿2020/06/18 05:57

sousuke

総合スコア3828

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

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

itzuakniami123

2020/06/18 06:10

ご回答ありがとうございます! 区切り文字としたい「カンマ・ピリオド・空白スペース・その他記号」を正規表現として表すにはどうしたらいいかを求めてました…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問