繁体   English   中英

货币格式的Javascript正则表达式

[英]Javascript regex for currency format

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

12345.00美元

123.00 XXX

anyOtherString

..我需要

12345.00美元 ==> 12345美元

12345 00 USD ==> $ 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给出错误的结果

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

这是我可以想到的每一种情况的有效方法:

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

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

在这里演示

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

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

在这里演示

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 ] * [azAZ] {0,3}))

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM