2017-09-21 93 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的建议工作,谢谢指出! 更新代码:

<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从字符串获取数字](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:匹配任何数字
  • :比赛。文字
  • +:匹配前一组的一个或更多的时间
+0

这一个也工作了,非常感谢! – PuntoGif

+0

@PuntoGif,不要忘了接受答案,如果你认为这是最好的,以帮助其他人。 –

-1

试试这个:

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

注意:您正在尝试将值分配给一个系统变量 - Value

代码乳宁:https://jsfiddle.net/2ohf65hc/

+0

这不是一个真正的答案。 OP想要从字符和数字中混合出来的字符提取数字值 – lumio

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; 

第2行的说明:这是一个正则表达式的从端部提取的数值部分一个字符串。这里的“数字部分”可以以负号(对于负数)开始,然后可以是一串数字(对于整数值),或者是零个或多个数字,后面跟着一个小数点,后面跟一个或多个小数。我已经添加了[ \t]*以允许在最后使用一些可选的空白。

如果你不熟悉正则表达式,这看起来很疯狂。

顺便说一下,由于您只是将结果放回到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更简单(这也很好,但速度较慢)