2017-09-21 30 views
0

JavaScriptが新しく、以下のコードはかなり悪い可能性があります。私は文字列から値を抽出しようとしています。私はparseFloat()がおそらく解決策ではないことを知っていますが、それを可能にする関数はありますか?JavaScriptの文字列から値を抽出します。

p id = "1"はランダムなテキストを含み、値で終わります。私の例以下ここで

<div id="abc"> 
<p id="1">abc 0.99</p> 
<p id="2">-</p> 
<button onclick="GetValue()">Extract value</button> 
</div> 

<script> 
function GetValue() { 
    var Value = parseFloat(document.getElementById("1").innerHTML); 
    document.getElementById("2").innerHTML = Value; 
} 
</script> 

どれ提案がはるかに高く評価されます!


この他のスレッドからの提案JavaScript get number from stringは、それを指摘してくれてありがとう! 更新されたコード:

function GetValue() { 
    var myValue = document.getElementById("1").textContent; 
    document.getElementById("2").innerHTML = myValue; 
} 

注:あなたは、システム変数に値を代入しようとしていた - Value

<div id="abc"> 
<p id="1">abc 0.99</p> 
<p id="2">-</p> 
<button onclick="GetValue()">Extract value</button> 
</div> 

<script> 
function GetValue() { 
    var String = document.getElementById("1").innerHTML; 
    var Value = String.replace(/^\D+/g, ''); 
    document.getElementById("2").innerHTML = Value; 
/* 
Solution 2> var Value = String.replace(/^.*?(-?([0-9]+|[0-9]*[.][0-9]+))[ \t]*$/gi,'$1'); 
Solution 3> var Value = String.match(/\d+(\.\d+)?/)[0]; 
*/ 
} 
</script> 
+1

いつもスペースで区切られていますか?その場合は、innerTextを分割して最後の配列アイテム – lumio

+0

を選択するだけです。https://stackoverflow.com/questions/10003683/javascript-get-number-from-string – user1844933

+0

[JavaScript get string from string](https ://stackoverflow.com/questions/10003683/javascript-get-number-from-string) – pucky124

答えて

2

あなたが使用することができregex

var str = "abc 0.99"; 
 
let number=str.match(/\d+(\.\d+)?/)[0]; 
 
alert(number);

Regex Explanation

  • 0-9:任意の数字に一致します。
  • :一致します。リテラル
  • +:あなたは本当に数値を必要とする場合は、1つのまたは複数の時間
+0

これもうまくいきました、ありがとうございます! – PuntoGif

+0

@PuntoGif、他の人を助けるためにそれが最高だと思えば、答えを受け入れることを忘れないでください。 –

-1

これを試してみてください。

コードruningて:https://jsfiddle.net/2ohf65hc/

+0

これは実際の回答ではありません。 OPは、文字と数値の混在した文字列から数値を抽出したい – lumio

0

parseFloatが、大丈夫です前のグループにマッチします。 「ランダムなテキストと値で終わる」部分は、そのテキストが何であるかに応じて少しトリッキーになる可能性があります。 (?例えば、それは他の数字を含めることができます)

ここでは、正規表現でそれを行う方法です:2行目の

var s = document.getElementById('1').innerHTML; 
s = s.replace(/^.*?(-?([0-9]+|[0-9]*[.][0-9]+))[ \t]*$/gi,'$1'); 
var x = parseFloat(s); 
document.getElementById('2').innerHTML = x; 

説明:これは端から数値部分を抽出する正規表現です文字列のここで「数値部分」はマイナス記号(負の数の場合)から始まり、整数値の場合は一桁の数字で始まり、小数点に続けて1つ以上の小数点以下の数字が続く場合もあります。私はを追加して、最後にいくつかのオプションの空白を許しています。

正規表現に慣れていないと、これはかなり狂っているように見えます。

ところで、結果をHTMLコンテンツに戻すだけなので、実際にはparseFloatは必要ありません。結果として得られるs(これはまだ文字列ですが、番号だけが取り除かれる前の内容の数字だけです)をHTMLにまっすぐに戻すことができます。

数字で実際の計算を行っている場合は、「はい」をparseFloat(s)としてください。

+0

説明をありがとう、コードは完全に動作します!間違いなく正規表現を見てみましょう – PuntoGif

0

あなたの文字列の構造はよう常に「テキストspace数が」数は末尾に常にある場合、あなただけの文字列を分割し、最後の項目を使用できます。

const str = "abc 0.99"; 
 
const tokens = str.split(' '); 
 
const number = parseFloat(tokens[ tokens.length - 1 ]); 
 
console.log(number);

これはRegExを使用するよりも簡単です(それも良いですが遅いです)

関連する問題