我有一些包含美元金额和其他文字的文字。一些美元金额有其他金额没有。以下是一些例子:
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;
})
答案 0 :(得分:2)
如何首先从文本中删除所有$,然后在每个数字前插入一个$?然后你不必担心检查它是否已经存在。
答案 1 :(得分:2)
这个怎么样:
function convertToMoney(text) {
return text.replace(/(\$?)([\d,]+)/g, "$$$2");
}
工作演示:http://jsfiddle.net/jfriend00/y4k3k/
这会找到任何数字序列(可选地以$符号开头)并用美元符号和数字序列替换它。
如果你真的想要你的正则表达式中的\b
,你也可以在这里添加它,但我没有看到它是必需的。
答案 2 :(得分: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;
}