如何使用JavaScript regex从以下字符串中提取值-1,234.23
?
“hello-sdvf-1,234.23 23 everybody 4”
应该提取
-1,234.23
此正则表达式返回null
:
"hello-sdvf-1,234.23 23 everybody 4".match(/-?\d+\.\d+/);
并且
可以"hello-sdvf-134.23 23 everybody 4".match(/-?\d+\.\d+/);
我也需要用逗号提取数字。
答案 0 :(得分:1)
您可以使用以下regex
:
var str = "hello-sdvf-1,234.23 23 everybody 4";
str.match(/[+\-]?\d+(,\d+)?(\.\d+)?/)[0];
alert(str.match(/[+\-]?\d+(,\d+)?(\.\d+)?/)[0]);

正则表达式解释
-?
:匹配零个或一个-
文字0-9
:匹配任何数字,
:匹配,
.
:匹配.
literal +
:与之前的论坛匹配一次或多次答案 1 :(得分:1)
您可以使用以下正则表达式:
-?\d+(?:,\d{3})*(?:\.\d+)?
它匹配可选的连字符(-?
),然后是1位或更多位数(\d+
),然后是可选的3位数组((?:,\d{3})*
),然后是可选的小数部分({ {1}})。
(?:\.\d+)?

var s = "hello-sdvf-1,234.23 23 everybody 4";
var res = s.match(/-?\d+(?:,\d{3})*(?:\.\d+)?/);
document.getElementById("r").innerHTML = res;

或者,要匹配多个值:
<div id="r"/>
&#13;
var re = /-?\d+(?:,\d{3})*(?:\.\d+)?/g;
var str = 'hello-sdvf-1,234.23 23 everybody 4';
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
document.getElementById("r2").innerHTML += m[0] + "<br/>";
}
&#13;
答案 2 :(得分:0)
您可以使用此正则表达式进行匹配:
var re = /\b[+-]?\d+(?:,\d{3})*(?:\.\d+)?\b/;
<强>代码:强>
var m = "hello-sdvf-1,234.23 23 everybody 4".match(re);
//=> ["-1,234.23"]
答案 3 :(得分:0)
好问题。我提出了一个初始功能,它可以做一些稍微不同的事情。它将从字符串中提取数值并将其转换为数字类型。
因为在各种语言环境中数字的格式不同,您可以定义哪些字符应该用作千位分隔符(默认=&#34;,&#34;),以及哪些字符用于小数点(默认值= &#34;&#34;。)
function extractNumber(value, thousands, decimals) {
thousands = thousands || ',';
decimals = decimals || '.';
var regexp = new RegExp("[+-]?\\d+(?:["+thousands+"]\\d{3})*(?:["+decimals+"]\\d+)?", "g");
value = value.match(regexp)[0];
value = value.replace(new RegExp('['+thousands+']', 'g'), '');
value = parseFloat(value);
return value;
};
用法示例:
extractNumber("hello-sdvf-1,234.23 23 everybody 4");
返回
-1234.23 (a number, not a string)