假设我有一个未知的价格格式,可能是
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
..几乎没问题,除了 str4 和 str5 给出了错误的结果
最佳答案
编辑:正确答案位于下面的编辑部分
以下是适用于我能想到的每种情况的方法:
替换:
(\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 或什么都没有,则您需要将其替换为开头带有 $
的相同值。否则,您什么也不做。
如果这就是您正在寻找的,我可以给您您想要的(它比同一字符串中的多个数字简单得多^^)。
123
、123.00
、123 USD
、123 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/