【问题标题】:Regex extracting price or number value from string in JavaScript [duplicate]正则表达式从 JavaScript 中的字符串中提取价格或数值 [重复]
【发布时间】:2015-10-02 16:04:23
【问题描述】:

如何使用 JavaScript 正则表达式从以下字符串中提取值 -1,234.23

"hello-sdvf-1,234.23 23 大家 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+/);

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

【问题讨论】:

  • 分享您的研究对每个人都有帮助。告诉我们您尝试了什么以及为什么它不能满足您的需求。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见how to ask
  • 有什么要求?一个字符串中会有多个值吗?这个数字应该是负数吗?

标签: javascript regex


【解决方案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. .:匹配 . 文字
  5. +: 匹配上一组一次或多次

【讨论】:

  • 您的正则表达式也将匹配......
  • @stribizhev 请检查更新的答案
  • 好的,这里还有一个问题,但我会留给你发现:)
  • @stribizhev:谈到重复,希望您在回答前 2 分钟看到我的回答 :)
  • 关键是,如果您看到已发布的答案与您的相同,请避免重复发布。
【解决方案2】:

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

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】:

    您可以使用以下正则表达式:

    -?\d+(?:,\d{3})*(?:\.\d+)?
    

    它匹配一个可选的连字符 (-?),然后是 1 个或多个数字 (\d+),然后是可选的 3 位数字组 ((?:,\d{3})*),然后是可选的小数部分 ((?:\.\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"/>

    或者,匹配多个值:

    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/>";
    }
    &lt;div id="r2"/&gt;

    【讨论】:

      【解决方案4】:

      好问题。我想出了一个初始函数,它做的事情略有不同。它将从字符串中提取数值并将其转换为数字类型。

      由于数字在各种语言环境中的格式不同,您可以定义哪些字符将用作千位分隔符(默认 =“,”),哪些用于小数点(默认 =“.”)。

          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)
      

      【讨论】:

        猜你喜欢
        • 2018-06-21
        • 2020-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-12
        相关资源
        最近更新 更多