zoo*_*277 9 javascript regex string
使用javascript正则表达式从文本中获取数字的最佳方式是什么...例如......我有"$ 4,320 text/followme",我希望得到4320.但是我希望在第一次出现字母或任何非字母之后避免使用数字而不是逗号','
所以,如果我有4,320美元t234ext/followme它仍然会返回4320.输入将始终有$符号
所以正则表达式应该返回
$4,320 text/followme returns 4320
$4,320 t3444ext/followme return 4320
$4,320 /followme return 4320
$4320 text/followme return 4320
$4320 t3444ext/followme return 4320
$4320 /follow4me return 4320
Run Code Online (Sandbox Code Playgroud)
您可能正在寻找的最简单的正则表达式是\D(任何不是数字的字符.这些"否定"表达式中的一些 - \d匹配数字,\D匹配非数字.\w匹配"字"字符(字母数字加下划线) ,\W匹配非数字.\s匹配空格,\S匹配非空白字符).
所以:
str = '$4,320 text/folowme';
number = str.replace(/\D/g,'');
Run Code Online (Sandbox Code Playgroud)
应该在数字内产生'4320'.'g'很重要.它表示对该正则表达式的所有实例进行全局搜索/替换.没有它,你将失去美元符号.:)
请注意,如果您有负数或有理数(表示中可能有两个非数字字符,' - '和'.'),您的问题就会变得有点困难.你可以这样做:
number = str.replace(/[^-.0-9]/g,'');
Run Code Online (Sandbox Code Playgroud)
只要你的数字形成良好,这将有效 - 因为没有人像'4-5.0-9aaaa4z.2'那样疯狂.
为了安全起见,你可以通过运行该列表位parseInt或parseFloat:
number = parseFloat(str.replace(/[^-.0-9]/g,''));
Run Code Online (Sandbox Code Playgroud)
UPDATE
我间隔了要求以避免包括后续数字.如果空格可靠地界定了你想要的数字的结尾,就像在例子中那样,你可以在我给出的最后一个例子中为否定的字符类添加一个空格或\ s,所以它是这样的:
number = parseFloat(str.replace(/[^-.0-9\s]/g,''));
Run Code Online (Sandbox Code Playgroud)
并且它会删除额外的数字就好了.
更新2
在考虑了这一点之后,使用parseFloat意味着您不必删除所有内容 - 只需要在您想要的数字之前的所有非数字字符和逗号.因此,我们可以将其分解为两个更简单的正则表达式(并且可能更快,特别是因为其中一个是非全局的).然后parseFloat将为您丢弃尾随的非数字输入.
number = parseFloat(str.replace(/,/g,'').replace(/^[^-0-9]*/,''));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24446 次 |
| 最近记录: |