使用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
答案 0 :(得分:15)
string.split(/ /)[0].replace(/[^\d]/g, '')
答案 1 :(得分:5)
你可能寻找的最简单的正则表达式是\D
(任何不是数字的字符。这些“否定”表达式中有一些 - \d
匹配数字,\D
匹配非数字。\w
匹配“字”字符(字母数字加下划线),\W
匹配非数字。\s
匹配空格,{ {1}}匹配非空格字符。)
所以:
\S
应该在数字内部产生'4320'。 'g'很重要。它表示对该正则表达式的所有实例执行全局搜索/替换。没有它,你将失去美元符号。 :)
请注意,如果你有负数或有理数(表示中可能有两个非数字字符,' - '和'。'),你的问题就会变得有点困难。你可以这样做:
str = '$4,320 text/folowme';
number = str.replace(/\D/g,'');
只要你的数字形成良好,这将有效 - 因为没有人像'4-5.0-9aaaa4z.2'那样疯狂。
为安全起见,您可以通过number = str.replace(/[^-.0-9]/g,'');
或parseInt
运行该列表:
parseFloat
<强>更新强>
我将要求隔开以避免包括后续数字。如果空格可靠地界定了你想要的数字的结尾,就像在例子中那样,你可以在我给出的最后一个例子中为否定的字符类添加一个空格或\ s,所以它是这样的:
number = parseFloat(str.replace(/[^-.0-9]/g,''));
并且它会删除额外的数字。
更新2
在考虑了这一点之后,使用number = parseFloat(str.replace(/[^-.0-9\s]/g,''));
意味着您不必删除所有内容 - 只需要之前的所有非数字字符您想要的数字,和逗号。因此,我们可以将其分解为两个更简单的正则表达式(并且可能更快,特别是因为其中一个是非全局的)。然后 parseFloat
将为您丢弃拖尾的非数字输入。
parseFloat
答案 2 :(得分:0)
function parseNumber(input) {
var r = "", i = 0, c = "", s = input + " ";
if (s.charAt(0) === "$") {
i++;
}
while (i < s.length) {
c = s.charAt(i++);
if (c < "0" || c > "9") {
if (c === ",") {
continue;
}
break;
}
r += c;
}
return r;
}
答案 3 :(得分:0)
这是一个稍微复杂的正则表达式。
第二行:它检查初始'$',并允许任何数字组合(0-9)和之后的逗号。
第3行:删除数字值中的前导$和任何逗号。
我不知道副手,但我想说JavaScript支持分组,并且可以在match语句中使用逗号来捕获数字值,简化replace语句以删除逗号。
var str="$4,320 t3444ext/followme";
var regex = /^\$([0-9,])*/g;
var matchedNum = str.match(regex)[0].replace(/[\$,]/g, '');