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
..几乎没问题,除了 str4 和 str5 给出了错误的结果
您好,您可以尝试以下方法
([$\s](?:\d{1,3}(?:[\s,]\d{3})+|\d+) (?:.\d{2})?([\s]*[a-z-A-Z]{0,3}))
编辑:正确答案在下面的编辑部分
以下是适用于我能想到的每种情况的方法:
替换:
(\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 或什么都没有,你想用开头带有 $
的相同值替换它。否则,你什么都不做。
如果这是你要找的,我可以给你你想要的(这比同一个字符串中的多个数字简单得多^^)。
123
、123.00
、123 USD
、123 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);
}
假设我有一个未知的价格格式,可以是
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
..几乎没问题,除了 str4 和 str5 给出了错误的结果
您好,您可以尝试以下方法
([$\s](?:\d{1,3}(?:[\s,]\d{3})+|\d+) (?:.\d{2})?([\s]*[a-z-A-Z]{0,3}))
编辑:正确答案在下面的编辑部分
以下是适用于我能想到的每种情况的方法:
替换:
(\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 或什么都没有,你想用开头带有 $
的相同值替换它。否则,你什么都不做。
如果这是你要找的,我可以给你你想要的(这比同一个字符串中的多个数字简单得多^^)。
123
、123.00
、123 USD
、123 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);
}