正则表达式从JavaScript中的字符串中提取价格或数值

时间:2015-07-14 06:43:10

标签: javascript regex

如何使用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+/);

我也需要用逗号提取数字。

4 个答案:

答案 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]);




正则表达式解释

  1. -?:匹配零个或一个-文字
  2. 0-9:匹配任何数字
  3. ,:匹配,
  4. .:匹配. literal
  5. +:与之前的论坛匹配一次或多次

答案 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;
&#13;
&#13;

答案 2 :(得分:0)

您可以使用此正则表达式进行匹配:

var re = /\b[+-]?\d+(?:,\d{3})*(?:\.\d+)?\b/;

RegEx Demo

<强>代码:

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)