从 JavaScript 中的字符串中提取值
Extract value from string in JavaScript
我是 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,'');
Solution 3> var Value = String.match(/\d+(\.\d+)?/)[0];
*/
}
</script>
试试这个:
function GetValue() {
var myValue = document.getElementById("1").textContent;
document.getElementById("2").innerHTML = myValue;
}
注意:您试图为系统变量赋值 - Value
。
您可以使用以下 regex
:
var str = "abc 0.99";
let number=str.match(/\d+(\.\d+)?/)[0];
alert(number);
Regex Explanation
- 0-9 : 匹配任意数字
- .:匹配。文字
- + : 匹配前一组一次或多次
parseFloat
很好,如果你真的需要数值的话。 "some random text and end with a value" 部分可能有点诡异,具体取决于文本的内容。 (比如可以包含其他数字吗?)
这是一种使用正则表达式的方法:
var s = document.getElementById('1').innerHTML;
s = s.replace(/^.*?(-?([0-9]+|[0-9]*[.][0-9]+))[ \t]*$/gi,'');
var x = parseFloat(s);
document.getElementById('2').innerHTML = x;
第2行的解释:这是一个从字符串末尾提取数字部分的正则表达式。这里的 'numerical part' 可能以减号开头(对于负数),然后只是一串数字(对于整数值),或者零个或多个数字后跟一个小数点再跟一个或多个小数。我添加了 [ \t]*
以允许在末尾有一些可选的空格。
如果您不熟悉正则表达式,这看起来会很疯狂。
顺便说一下,由于您只是将结果放回到 HTML 内容中,实际上不需要 parseFloat
。您可以将结果 s(它仍然是一个字符串,但只是数字,数字之前的内容被删除)直接放回 HTML。
如果您正在对数字进行实际计算,那么是的,请使用 parseFloat(s)
。
当您的字符串结构总是像 "textspace
number" 时数字总是在末尾,您可以拆分字符串并使用最后一项:
const str = "abc 0.99";
const tokens = str.split( ' ' );
const number = parseFloat( tokens[ tokens.length - 1 ] );
console.log( number );
这比使用 RegEx 简单得多(后者也很好,但速度较慢)
我是 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,'');
Solution 3> var Value = String.match(/\d+(\.\d+)?/)[0];
*/
}
</script>
试试这个:
function GetValue() {
var myValue = document.getElementById("1").textContent;
document.getElementById("2").innerHTML = myValue;
}
注意:您试图为系统变量赋值 - Value
。
您可以使用以下 regex
:
var str = "abc 0.99";
let number=str.match(/\d+(\.\d+)?/)[0];
alert(number);
Regex Explanation
- 0-9 : 匹配任意数字
- .:匹配。文字
- + : 匹配前一组一次或多次
parseFloat
很好,如果你真的需要数值的话。 "some random text and end with a value" 部分可能有点诡异,具体取决于文本的内容。 (比如可以包含其他数字吗?)
这是一种使用正则表达式的方法:
var s = document.getElementById('1').innerHTML;
s = s.replace(/^.*?(-?([0-9]+|[0-9]*[.][0-9]+))[ \t]*$/gi,'');
var x = parseFloat(s);
document.getElementById('2').innerHTML = x;
第2行的解释:这是一个从字符串末尾提取数字部分的正则表达式。这里的 'numerical part' 可能以减号开头(对于负数),然后只是一串数字(对于整数值),或者零个或多个数字后跟一个小数点再跟一个或多个小数。我添加了 [ \t]*
以允许在末尾有一些可选的空格。
如果您不熟悉正则表达式,这看起来会很疯狂。
顺便说一下,由于您只是将结果放回到 HTML 内容中,实际上不需要 parseFloat
。您可以将结果 s(它仍然是一个字符串,但只是数字,数字之前的内容被删除)直接放回 HTML。
如果您正在对数字进行实际计算,那么是的,请使用 parseFloat(s)
。
当您的字符串结构总是像 "textspace
number" 时数字总是在末尾,您可以拆分字符串并使用最后一项:
const str = "abc 0.99";
const tokens = str.split( ' ' );
const number = parseFloat( tokens[ tokens.length - 1 ] );
console.log( number );
这比使用 RegEx 简单得多(后者也很好,但速度较慢)