使用javascript中的正则表达式从文本中过滤掉数字

时间:2010-06-22 20:50:38

标签: 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

4 个答案:

答案 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, '');