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

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

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

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

正規表現

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

526閲覧

正規表現とreplace()について

ZZ-TOP

総合スコア36

JavaScript

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

正規表現

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/06/22 05:17

JavaScriptの勉強をしています。

正規表現の勉強をする時に replace()を使って
コンソールに出力し動作確認をして、使い方を勉強しています。

ところが以下のように入力してみたところ

Javascript

1var AA= "2013-08-15"; 2var DD=AA.replace((/-?/), '/'); 3console.log(DD);

結果は
「/2013-08-15」になります

私の感覚では「/08-15」になると思っていたのですが、
実際の出力結果は上記の通りです。

replace()の機能で文字を置換するはずですが、
「/2013-08-15」ではどの文字も置換されていません。

以下のページによると

正規表現一覧
http://gimite.net/help/devas-ja/all_regex.html

正規表現検索とは
http://gimite.net/help/devas-ja/100regex.html

「? 直前の文字は省略可能 he?lp hlp または help 」

とあるし、replace()を使っているのでどこかの文字が置換されるはずなのですが
「/2013-08-15」の結果は、どの文字も全く置換されていません。

なので「?」をどう解釈すれば良いのかわかりません。

正規表現に詳しい方、説明の上手な方、お手数ですが、
「?」をreplace()を使った場合の解釈について教えて下さい。

追記
JavaScriptで正規表現の勉強をする時に
replace()の他にわかりやすい(動作を確認しやすい)
メソッドがあれば教えて下さい。

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

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

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

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

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

guest

回答2

0

空文字

JavaScript

1var DD=AA.replace((/-?/), '/');

-?空文字にマッチする為、"2013-08-15" の先頭(^)にマッチしています。

動作確認用メソッド

replace()の他にわかりやすい(動作を確認しやすい)メソッドがあれば教えて下さい。

特に、RegExp.prototype.exec は返り値に多くの情報があります。

Re: ZZ-TOP さん

投稿2019/06/22 05:23

編集2019/06/22 05:37
think49

総合スコア18162

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

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

ZZ-TOP

2019/06/22 05:36

回答して頂きありがとうございます。 先の方の回答で理解できました。 先頭の空文字にヒットしているのですね。 今回は回答して頂きありがとうございます。
ZZ-TOP

2019/06/22 05:43

replace()以外のメソッドを教えて頂きありがとうございます。 早々に解決したのでベストアンサーを付けてしまいましたが、 こちらも教えて頂き助かりました、これらも活用していきます。 ありがとうございます。
guest

0

ベストアンサー

↓こちらはいかがですか?

x? 直前の文字 x の 0 回か 1 回の出現にマッチします。。

数量詞 - JavaScript | MDN

というわけで、-が0回出現するということは空文字列''ですから、文字列の先頭にヒットして、空文字列''を置換するため、何も削除されない、という結果になります。

投稿2019/06/22 05:26

Lhankor_Mhy

総合スコア36074

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

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

ZZ-TOP

2019/06/22 05:34

回答して頂きありがとうございます。 「x? 直前の文字 x の 0 回か 1 回の出現にマッチします。」 これがヒットするので、 「-」が0回出現する→空文字列→文字列の先頭にヒットする →空文字列を「/」に変換したということですね。 プログラム的には空文字列を変換しているけれど 人間の目にはどの文字も置換していないように 見えてしまう、、、。 というわけですね。 よくわかりました、今回は回答して頂きありがとうございます。 機会があればまたお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問