【问题标题】:Adding $ (dollar sign) to mutiple numbers in Javascript在Javascript中将$(美元符号)添加到多个数字
【发布时间】:2013-10-14 19:43:34
【问题描述】:

我有一些包含美元金额和其他文本的文本。一些美元金额有美元其他没有。以下是一些示例:

  • 1,000 到 15,000

  • 40 美元

  • 4000

如果一个数字不存在,我希望在每个数字的开头添加一个 $。我的尝试:

function convertToMoney(text) {
  if (!text.match(/\$/)) {
    return text.replace(/\b([\d,]+)\b/g, function(d) { return('$'+d); });
  }
  return text;
}

如果 JS 有 lookbehind 我会使用

function convertToMoney(text) {
  return text.replace(/(?<!\$)\b(?:\d)/g, '$');
}

我可以简化我的长期解决方案吗?

我可以让它与1000 up to $4000一起工作吗?

更新

应用@jfriend00 解决方案后,我的金钱过滤器如下所示:

function moneyFilter(text) 
  var ret = text;
  if (ret) {
    ret = ret
      .replace(/\.\d\d/g, '')                  // remove pennies
      .replace(/\B(?=(?:\d{3})+(?!\d))/g, ',') // add comma
      .replace(/(\$?)(\d[\d,]+)/g, "$$$2");    // add dollar sign
  }
  return ret;
})

【问题讨论】:

    标签: javascript regex regex-lookarounds


    【解决方案1】:

    你可以纠正双美元符号。

    function convertToMoney(text) {
      if (!text.match(/\$/)) {
        newString = text.replace(/\b([\d,]+)\b/g, function(d) { return('$'+d); });
        return newString.replace(/\${2}/g, '$');
      }
      return text;
    }
    

    【讨论】:

      【解决方案2】:

      这个怎么样:

      function convertToMoney(text) {
          return text.replace(/(\$?)([\d,]+)/g, "$$$2");
      }
      

      工作演示:http://jsfiddle.net/jfriend00/y4k3k/

      这会查找任何数字序列(可选地以 $ 符号开头)并将其替换为美元符号和数字序列。

      如果你真的想要你的正则表达式中的\b,你也可以在这里添加它,但我认为它不是必需的。

      【讨论】:

      • 谢谢。我也想知道如何逃避 $ 登录替换。
      【解决方案3】:

      如何先从文本中删除所有 $,然后在每个数字前面插入一个?这样您就不必担心检查它是否已经存在了。

      【讨论】:

      • 奇怪的是,这正是 @jfriend00 在一次通过中所做的事情。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-29
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多