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

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

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

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

正規表現

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

Q&A

解決済

4回答

1440閲覧

JSで文字列からNumber型に変換するのに必要な文字だけを取り出したいです

maetoo11

総合スコア10

JavaScript

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

正規表現

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

1グッド

0クリップ

投稿2016/04/06 08:18

JSでとある文字列の中からNumber型に変換するのに必要な文字だけを取り出したいです。

以下に入力と出力の例をいくつか示します。

var before = "-.^-.^-.^12345-.^345-.^34テストテスト五項の擦り切れ5-.^345-.^345-.^"; var after = before.replace(【何らの正規表現】); console.log(after) // => -.12345345345345345
var before = "geuiyh32.4gv890jkh-qkj.fe3"; var after = before.replace(【何らの正規表現】); console.log(after) // => 32.48903
var before = "***ほげほげ12345ふむふむ67" var after = before.replace(【何らの正規表現】); console.log(after) // => 1234567

【何らかの正規表現】部分についてアドバイスをいただけると幸いです。

kei344👍を押しています

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

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

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

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

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

Lhankor_Mhy

2016/04/06 08:47

ちなみに"+12浮動小数点表記とか345e-1","0x0b0oX進法リテラルとか1010"←これらはどう返せばいいですか?
guest

回答4

0

要件は下記コードで満たせますが、懸念事項がいくつかあります。

  • 負の数(負の数を複数連結した場合に不正な数値文字列となる)
  • 少数 (.90.9 と見なすのか。少数を複数検出した場合の文字列連結すると不正な数値となる問題にどう対処するのか。)
  • 無限大(Infenity を扱うのか)
  • 10進数以外(16進数や2進数表記を扱うのか)

JavaScript

1'use strict'; 2function sample (string) { 3 return String(string).match(/-?\d+(?:\.\d+)?/g).join(''); 4} 5 6console.log(sample('-.^-.^-.^12345-.^345-.^34テストテスト五項の擦り切れ5-.^345-.^345-.^')); // "12345345345345345" 7console.log(sample('geuiyh32.4gv890jkh-qkj.fe3')); // "32.48903" 8console.log(sample('***ほげほげ12345ふむふむ67')); // "1234567" 9 10console.log(sample('1.0***2.3')); // "1.02.3" 11console.log(sample('.9***12')); // "912" 12console.log(sample('-1***-2')); // "-1-2" 13console.log(sample('0x12***0x21')); // "012021" 14console.log(sample('0b11***0b22')); // "011022"

Re: maetoo11 さん

投稿2016/04/06 14:31

編集2016/04/06 14:40
think49

総合スコア18162

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

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

0

ベストアンサー

正規表現1回では無理でした。それと、JavaScript(ECMAScript)の正規表現には後読みアサーションがないので文字列を反転させるという暴挙に出てしまいましたが、とりあえず、目的は果たせていると思います。

javascript

1var tmp = before.replace(/[^-.0-9]/g, ""); 2tmp = tmp.split("").reverse().join(""); 3tmp = tmp.replace(/-(?=.)|\.(?=.*\.)/g, ""); 4var after = tmp.split("").reverse().join("");

投稿2016/04/06 13:14

catsforepaw

総合スコア5938

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

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

0

考え方としては、0〜9以外の文字列を全て削る、という感じでした。
他に必要な条件があれば適宜追加してください。

javascript

1var before = "-.^-.^-.^12345-.^345-.^34テストテスト五項の擦り切れ5-.^345-.^345-.^"; 2var after = before.replace(/[^0-9]/g,''); 3console.log(after) // => 12345345345345345 4 5// こちらでも可 6var after = before.replace(/[^\d]/g,'');

投稿2016/04/06 09:30

編集2016/04/06 09:32
yamato_hikawa

総合スコア2092

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

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

0

正規表現で悩むくらいなら…

for (i = 0; i < before.length; i++) {
if (before.charAt(i) //以下略

ちまちま判断した方がいいんじゃ?

投稿2016/04/06 08:54

takasima20

総合スコア7458

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問