[英]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
..几乎可以,除了str4和str5给出错误的结果
编辑:正确的答案在下面的编辑部分中
这是我可以想到的每一种情况的有效方法:
更换:
(\\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或不包含任何数字,则您希望在开头用$
替换相同的值。 否则,您什么也不做。
如果这是您要查找的内容,我可以为您提供所需的内容(它比同一字符串^^中的多个数字要简单得多)。
123
, 123.00
, 123 USD
, 123 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}))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.