>假设我有一个未知的价格格式,可以是
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
..而且几乎没问题,除了str4和str5给出了错误的结果
编辑 :正确答案在下面的编辑部分<</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,则您希望将其替换为开头带有$
的相同值。否则,你什么都不做.
如果这是你要找的,我可以给你你想要的(它比同一个字符串中的多个数字简单得多^^).123
,123.00
,123 USD
,123 00 USD
和-123 00
必须匹配和替换,例如
你只需要替换 :^(-)?(d+)(?:[s.]0+)?s*(?:USD)?$
by1$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