从JavaScript中的字符串中提取值

时间:2017-09-21 19:10:15

标签: javascript extract

我对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>

4 个答案:

答案 0 :(得分:2)

您可以使用以下regex

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

Regex Explanation

  • 0-9 :匹配任何数字
  • :匹配。字面
  • + :与之前的群组匹配一次或多次

答案 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始终在最后,你可以只拆分字符串并使用最后一项:

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

这比使用RegEx简单(这也很好,但速度较慢)

答案 3 :(得分:-1)

试试这个:

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

注意:您试图将值分配给系统变量 - Value

代码运行:https://jsfiddle.net/2ohf65hc/