我有一些包含美元金额的文本和其他文本。有些美元金额有$,其他则没有。这里有些例子:


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;
})

最佳答案

这样吧:

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


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

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

如果您真的想在正则表达式中使用\b,也可以在此处添加它,但是我没有看到它是必需的。

10-05 20:42
查看更多