Javascript 货币格式的正则表达式

Javascript regex for currency format

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

12345.00 美元

123.00 XXX

anyOtherString

..我需要

12345.00 美元 ==> 12345 美元

12345 00 美元 ==> 123 美元

123.00 XXX ==> 123.00 XXX

anyOtherString ==> anyOtherString

你会如何处理这个问题?

编辑

使用以下内容进行测试:

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

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

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

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

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

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

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

您好,您可以尝试以下方法

([$\s](?:\d{1,3}(?:[\s,]\d{3})+|\d+) (?:.\d{2})?([\s]*[a-z-A-Z]{0,3}))

示例:https://regex101.com/r/ngWwDE/2

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

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

替换:
(\d+)(?:(?:[\.\s]0+|(\.\d+)))?\s?USD
通过
$

但是,如果在非整数之间有一个缺失点,则不起作用。例如,123 456 美元将被替换为 123 6
另外,我找不到让像“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 9';
str = str.replace(/(\d+)(?:(?:[\.\s]0+|(\.\d+)))?\s?USD/g, '$$');
console.log(str);


编辑:

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

如果这个数字的小数部分不存在,或者等于 0,并且这个数字后跟 USD 或什么都没有,你想用开头带有 $ 的相同值替换它。否则,你什么都不做。

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

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

演示 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', '9', '123'];
var strReplaced = "";
for (var i = 0; i < strArray.length; ++i) {
  strReplaced = strArray[i].replace(/^(-)?(\d+)(?:[\s\.]0+)?\s*(?:USD)?$/g, '$$');
  console.log(strArray[i]+" => "+strReplaced);
}