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

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

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

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

正規表現

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

Q&A

解決済

2回答

4003閲覧

正規表現で一致する要素すべてを格納したい

K_9301

総合スコア69

JavaScript

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

正規表現

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

0グッド

0クリップ

投稿2017/04/25 02:51

現在サイト内にある電話番号形式の数字文字列を取得しようとしているのですが
複数ある場合に、一番目にあるものしか取得できず、二番目以降にあるものも取得するにはどうしたら良いかご教示ください。

#HTML

<tag>0120-111-2222</tag> <tag>いろいろなテキストがつづく</tag> <tag>03-111-3333</tag> 続く。。

#JS

var contets = HTML全体; var myRegexp = /0[0-9()-]{10,11}/; var tel = response.match(myRegexp); //中の数字が桁数どおりでないとNG console.log(tel); // 結果は0120-111-2222しか取れない。うしろにある03-...も配列形式でとりたい

色々しらべるものの、わからず。。
何卒、宜しくおねがいします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

正規表現のgフラグ

「初めの一つしかマッチしない」のは正規表現リテラルでgフラグを付けていないからです。

国内の電話番号フォーマット

総務省に国内の電話番号書式の説明があります。

JavaScript

1function findTelNumberAll (string) { 2 var tel = string.match(/0(?:\d[(-]?\d{4}|(?![789]0)\d{2}[(-]?\d{3}|\d{3}[(-]?\d{2}|\d{4}[(-]?\d|[789]0[(-]?\d{4})[)-]?\d{4}(?!\d)/g); 3 4 return tel ? tel : []; 5} 6 7var targetString = ['<tag>東京都千代田何処其処1-2-12</tag>', 8 '<tag>0120-111-2222</tag>', // 誤 9 '<tag>03(4444)5555</tag>', // 正 10 '<tag>0120-12-4567</tag>', // 正 11 '<tag>045-987-6543</tag>', // 正 12 '<tag>01234-5-6789</tag>', // 正 13 '<tag>070-1111-2222</tag>', // 正 14 '<tag>080-1111-2222</tag>', // 正 15 '<tag>090-1111-2222</tag>', // 正 16 '<tag>090-111-2222</tag>', // 誤 17 '<tag>なにがしか</tag>'].join(); 18 19console.log(JSON.stringify(findTelNumberAll(targetString))); // ["03(4444)5555","0120-12-4567","045-987-6543","01234-5-6789","070-1111-2222","080-1111-2222","090-1111-2222"]

0120-111-2222

「0120-111-2222」は11桁の番号の為、日本国内の電話番号ではありません。
また、質問文のコードを適用すると、末尾2桁の数字が欠けます。

JavaScript

1console.log(/[0-9()-]{10,11}/.exec('0120-111-2222')[0]);

更新履歴

  • 2017/04/25 13:54 携帯電話番号の書式に対応

Re: KenKimura さん

投稿2017/04/25 04:03

編集2017/04/25 04:54
think49

総合スコア18164

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

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

K_9301

2017/04/25 09:58

ご丁寧にありがとうございます。大変勉強になりました。
guest

0

こうしてみてください

javascript

1var str="<tag>0120-111-2222</tag>\n"; 2str+="<tag>いろいろなテキストがつづく</tag>\n"; 3str+="<tag>03-111-3333</tag>\n"; 4var reg = new RegExp("0[0-9()-]{10,11}","g"); 5var r=str.match(reg); 6console.log(r); 7

投稿2017/04/25 02:55

yambejp

総合スコア114843

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問