用于货币格式的 Javascript 正则表达式



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

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, '$$$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给出了错误的结果

编辑 :正确答案在下面的编辑部分<</em>br/>
这是我能想到的每种情况都有效的东西:

替换 :
(d+)(?:(?:[.s]0+|(.d+)))?s?USD
by
$12

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

演示在这里

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

Java 脚本代码:

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 或 nothing,则您希望将其替换为开头带有$的相同值。否则,你什么都不做.

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

你只需要替换 :
^(-)?(d+)(?:[s.]0+)?s*(?:USD)?$
by
1$2

Demo here

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

嗨,您可以尝试以下操作

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

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

最新更新