我对JavaScript很陌生,所以下面的代码可能非常糟糕。我只是想从字符串中提取一个值。我知道parseFloat()可能不是解决方案,但有没有任何功能允许这样做?
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的建议有效,谢谢你指出了这一点! 更新的代码:
<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>
答案 0 :(得分:2)
您可以使用以下regex
:
var str = "abc 0.99";
let number=str.match(/\d+(\.\d+)?/)[0];
alert(number);
Regex Explanation
答案 1 :(得分:0)
parseFloat
没问题。 “一些随机文本和以值结尾”部分可能有点过时,具体取决于文本的内容。 (例如它可以包含其他数字吗?)
以下是使用正则表达式的方法:
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;
第二行的说明:这是一个正则表达式,从字符串的末尾提取数字部分。这里的“数字部分”可以以减号(对于负数)开始,然后只是一堆数字(对于整数值),或者是零个或多个数字后跟一个小数点后跟一个或多个小数。我添加了[ \t]*
以允许最后一些可选的空格。
如果你不熟悉正则表达式,这看起来会很疯狂。
顺便说一下,由于您只是将结果放回HTML内容中,因此实际上不需要parseFloat
。你可以直接将结果s(它仍然是一个字符串,但只有数字,数字被删除之前的内容)直接放回到HTML中。
如果您使用数字进行实际计算,那么请使用parseFloat(s)
。
答案 2 :(得分:0)
当你的字符串的结构总是像&#34; text space
number&#34; ,其中number始终在最后,你可以只拆分字符串并使用最后一项:
const str = "abc 0.99";
const tokens = str.split( ' ' );
const number = parseFloat( tokens[ tokens.length - 1 ] );
console.log( number );
&#13;
这比使用RegEx简单(这也很好,但速度较慢)
答案 3 :(得分:-1)
试试这个:
function GetValue() {
var myValue = document.getElementById("1").textContent;
document.getElementById("2").innerHTML = myValue;
}
注意:您试图将值分配给系统变量 - Value
。