只匹配数字、逗号和点,忽略空白
Only match numbers, commas and dots and ignore whitespaces
我有一个价格表,我想"规范化",使用Javascript风格的Regex。
样本输入: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
只在这些情况下。
这里有一个小提琴:http://jsfiddle.net/8h8Tk/
如果你真的想规范化你的输入,我建议你选择或者。用于十进制值分隔符。但是,如果不是,上面的jsfiddle会给出正确的输出。
var output = input.replace(/[^0-9'.,'n]|,[^0-9]/g, "");
这是一个直接从匹配(或替换)模式中跳出来的版本,除了s1, s2, s3等情况
正则表达式:(?:'d|[.,](?='d))+|('w+|.)
左侧匹配我们想要的字符:数字,或者点和逗号后面跟着数字。右边匹配并捕获单词字符或单个字符,我们知道这些不是我们想要的字符,因为它们没有被左边的表达式匹配。
当设置了Group 1时,用空字符串替换。
查看在线演示
的输出<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
如果您不介意分两步完成,请首先将所有逗号转换为点:
x = x.replace(/,/g, '.')
然后删除其他所有内容:
x = x.replace(/[^.|0-9]+/g,'')
替换不需要的部分:
result = subject.replace(/[^'d.,]+/g, "");
/((?:['d.,'s]+)?['d]+)'b/g
呢?它从你的原始版本扩展而来
相关文章:
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 测试索引值是否等于某个数字的倍数
- 如何删除多行HTML排列中的空白
- 在Twitter上用ie9中的空白src访问iframe的contentWindow
- 不同浏览器中的空白字符正则表达式行为
- Javascript中的空白是什么
- 将数字转换为一定数量的硬币
- Facebook共享显示一个接一个的空白页面
- 如果我在javascript中输入无效的电子邮件或空白,如何显示特定的文本框边框红色
- 键入最后一位数字后自动提交
- 如何在javascript中迭代数字列表
- Javascript Regex选择每个非字母数字字符和空白
- 无法从数字中删除空白(PHP/JS)
- 将文本字段设置为仅接受数字和空白
- 在数字范围内查找空白
- 空白或空的数字文本框,而不是零值
- JS字符串:在数字和字母之间添加空白
- 使用javascript删除字符串中的所有非字母数字和任何空白
- 只匹配数字、逗号和点,忽略空白
- 将类型=数字的输入设置为空白是否合法