货币格式的 Javascript 正则表达式

标签 javascript regex decimal currency

假设我有一个未知的价格格式,可能是

12345.00 美元

123.00 XXX

任何其他字符串

..我需要

12345.00 美元 ==> 12345 美元

12345 00 美元 ==> 123 美元

123.00 XXX ==> 123.00 XXX

任何其他字符串 ==> 任何其他字符串

你会如何处理这个问题?

编辑

使用以下内容进行测试:

var str1 = "122.00 USD";
console.log("str1: "+str1.replace(/(\d+)(?:(?:[\.\s]0+|(\.\d+)))?\s?USD/g, '$$$1$2'));
// ==> $122

var str2 = "122 00 USD";
console.log("str2: "+str2.replace(/(\d+)(?:(?:[\.\s]0+|(\.\d+)))?\s?USD/g, '$$$1$2'));
// ==> $122

var str3 = "122 USD";
console.log("str3: "+str3.replace(/(\d+)(?:(?:[\.\s]0+|(\.\d+)))?\s?USD/g, '$$$1$2'));
// ==> $122

var str4 = "122";
console.log("str4: "+str4.replace(/(\d+)(?:(?:[\.\s]0+|(\.\d+)))?\s?USD/g, '$$$1$2'));
// ==> 122

var str5 = "122.00";
console.log("str5: "+str5.replace(/(\d+)(?:(?:[\.\s]0+|(\.\d+)))?\s?USD/g, '$$$1$2'));
// ==> 122.00

var str6 = "$122";
console.log("str6: "+str6.replace(/(\d+)(?:(?:[\.\s]0+|(\.\d+)))?\s?USD/g, '$$$1$2'));
// ==> $122

..几乎没问题,除了 str4str5 给出了错误的结果

最佳答案

编辑:正确答案位于下面的编辑部分

以下是适用于我能想到的每种情况的方法:

替换:
(\d+)(?:(?:[\.\s]0+|(\.\d+)))?\s?美元
通过
$\1\2

但是,如果非整数之间缺少点,则不起作用。例如,123 456 USD 将替换为 123 $456
另外,我找不到一种方法让“123.456 USD”这样的数字保持不变(请参阅下面的评论)

演示 here

如果您需要任何解释,我可以提供更多详细信息。
如果您看到一些我没有处理的案例,请说出来!

JavaScript 代码:

var str = '123.00 USD 1234 USD 357.0 USD 456 00 USD 651USD 753.684 USD 123 456 USD -123 USD 789.00 XXX 123.00 wrongcurrency test string $159';
str = str.replace(/(\d+)(?:(?:[\.\s]0+|(\.\d+)))?\s?USD/g, '$$$1$2');
console.log(str);

<小时/>

编辑:

好的,我想我明白了。如果我错了请纠正我:
您的字符串由单个数字组成,可能带有用点或空格分隔的小数部分。数字后面可能跟有其他字符串。

如果该数字的小数部分不存在或等于 0,并且该数字后跟 USD 或什么都没有,则您需要将其替换为开头带有 $ 的相同值。否则,您什么也不做。

如果这就是您正在寻找的,我可以给您您想要的(它比同一字符串中的多个数字简单得多^^)。
123123.00123 USD123 00 USD-123 00 有例如要匹配和替换

您只需替换:
^(-)?(\d+)(?:[\s\.]0+)?\s*(?:USD)?$
通过
\1$\2

演示 here

JavaScript 代码:

var strArray = ['123.00 USD', '1234 USD', '357.0 USD', '456 00 USD', '651USD', '753.684 USD', '123 456 USD', '-123 USD', '789.00 XXX', '123.00 wrongcurrency', 'test string', '$159', '123'];
var strReplaced = "";
for (var i = 0; i < strArray.length; ++i) {
  strReplaced = strArray[i].replace(/^(-)?(\d+)(?:[\s\.]0+)?\s*(?:USD)?$/g, '$1$$$2');
  console.log(strArray[i]+" => "+strReplaced);
}

关于货币格式的 Javascript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43887508/

相关文章:

python - 如何用参数填充正则表达式字符串

javascript - 如何在 react 中将段落中存在的双 "OO"单词更改为绿色方 block ?例如克鲁尼 - cl[green square]ey

java - 创建正则表达式用于带条件的电子邮件 ID 验证

javascript - jQuery 解析巨大的响应失败

javascript - 将单词匹配为单独的字符串,除非它们以大写字母开头

C# 小数类型相等

php - 比较双十进制数

C libpq : get float value from numeric

javascript - 等到图像加载并调整大小后再触发动画?

javascript - 在 webpack + postcss-loader 中观看导入的 css 文件