我有一个价格表,我想使用正则表达式的Javascript风格“正常化”。
示例输入:
1
1,99
1.99
10
100
5999 dollars
2 USD
$2,99
Our price 2.99
Price: $ 20
200 $
20,-
6 999 USD
期望的输出:
1
1,99
1.99
10
100
5999
2
2,99
2.99
20
200
20
6999
/([0-9.,\s]+)/
我的成绩相当不错,但我有两个问题:
最后一个示例行返回6
而不是6 999
。我不确定是否可以“删除”该空间,最好是我想6999
,但6 999
足够接近。
第二行返回20,
(这是合乎逻辑的,因为我包含了逗号),但仅在这些情况下需要20
。
答案 0 :(得分:2)
这是一个小提琴:http://jsfiddle.net/8h8Tk/
如果您真的想要将输入标准化,我建议您选择其中之一,或者。为您的小数值分隔符。但是,如果没有,上面的jsfiddle给出了正确的输出。
var output = input.replace(/[^0-9\.,\n]|,[^0-9]/g, "");
所有这一切都是删除你不想要的角色。
答案 1 :(得分:0)
如果您不介意分两步完成,请先将所有逗号转换为点:
x = x.replace(/,/g, '.')
然后摆脱其他一切:
x = x.replace(/[^.|0-9]+/g,'')
答案 2 :(得分:0)
替换你不想要的东西:
result = subject.replace(/[^\d.,]+/g, "");
答案 3 :(得分:0)
这是一个直接来自Match (or replace) a pattern except in situations s1, s2, s3 etc
的版本正则表达式:(?:\d|[.,](?=\d))+|(\w+|.)
交替的左侧与我们想要的字符匹配:数字,或点和逗号后跟数字。右侧匹配并捕获单词字符或单个字符,我们知道这些不是我们想要的字符,因为它们与左侧的表达不匹配。
当设置了第1组时,我们用空字符串替换。
请参阅online demo
中的输出<script>
var subject = "1 \n\
1,99 \n\
1.99 \n\
10 \n\
100 \n\
5 999 \n\
2 USD \n\
$2,99 \n\
Our price 2.99 \n\
Price: $ 20 \n\
200 $ \n\
20,- \n\
6 999 USD";
var regex = /(?:\d|[.,](?=\d))+|(\w+|.)/g;
replaced = subject.replace(regex, function(m, group1) {
if (group1 == "" ) return m;
else return "";
});
document.write("<pre>");
document.write(replaced);
document.write("</pre>");
</script>
输出
1
1,99
1.99
10
100
5999
2
2,99
2.99
20
200
20
6999
答案 4 :(得分:0)
/((?:[\d.,\s]+)?[\d]+)\b/g
如何从原始版本扩展