2

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

  • 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向后看,我会使用

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

3 回答 3

2

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

于 2013-10-08T02:59:05.560 回答
2

这个怎么样:

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

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

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

如果你真的想要\b你的正则表达式,你也可以在这里添加它,但我没有看到它是必需的。

于 2013-10-08T03:04:32.267 回答
0

你可以纠正双美元符号。

function convertToMoney(text) {
  if (!text.match(/\$/)) {
    newString = text.replace(/\b([\d,]+)\b/g, function(d) { return('$'+d); });
    return newString.replace(/\${2}/g, '$');
  }
  return text;
}
于 2013-10-08T03:16:20.203 回答