只匹配数字,逗号和点,并忽略空格

时间:2014-05-21 20:41:33

标签: javascript regex

我有一个价格表,我想使用正则表达式的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

5 个答案:

答案 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如何从原始版本扩展