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

在javascript中使用正则表达式从文本中过滤出数字,javascript,regex,string,Javascript,Regex,String,使用javascript正则表达式从文本中获取数字的最佳方法是什么。。 e、 我有“4320美元文本/跟随我”,我想从中得到4320美元。然而,我想避免在第一次出现字母表或任何非字母表(逗号除外)之后出现数字 因此,如果我有$4320 t234ext/followme,它仍将返回我4320。 输入的开头总是有$符号 因此正则表达式应该返回 $4,320 text/followme returns 4320 $4,320 t3444ext/followme ret

使用javascript正则表达式从文本中获取数字的最佳方法是什么。。 e、 我有“4320美元文本/跟随我”,我想从中得到4320美元。然而,我想避免在第一次出现字母表或任何非字母表(逗号除外)之后出现数字

因此,如果我有$4320 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
函数解析号(输入){
var r=“”,i=0,c=“”,s=input+”;
如果(s.charAt(0)=“$”){
i++;
} 
而(i“9”){
如果(c==“,”){
继续;
}
打破
}
r+=c;
}
返回r;
}

您可能要寻找的最简单的正则表达式是
\D
(任何非数字的字符。有一些“否定”表达式--
\D
匹配一个数字,
\D
匹配非数字。
\w
匹配“单词”字符(字母数字加下划线),
\W
匹配非数字。
\s
匹配空白,
\s
匹配非空白字符)

因此:

应在数字的内部生成'4320'。“g”很重要。它表示对该正则表达式的所有实例进行全局搜索/替换。没有它,你只会失去美元符号。:)

请注意,如果你有负数或有理数(在它们的表示中可以有两个非数字字符“-”和“.”),你的问题会变得更难。你可以这样做:

number = str.replace(/[^-.0-9]/g,'');
只要你的数字格式正确,这就行了——因为没有人会做像“4-5.0-9aaa4z.2”这样疯狂的事情

为了安全起见,您可以通过
parseInt
parseFloat
运行该列表位:

number = parseFloat(str.replace(/[^-.0-9]/g,''));
更新

我将要求隔开,以避免包含后续数字。如果像示例中那样,空格可靠地限定了所需数字的结尾,则可以在我给出的最后一个示例中的否定字符类中添加空格或\s,因此如下所示:

number = parseFloat(str.replace(/[^-.0-9\s]/g,''));
这样就可以去掉多余的数字了

更新2

在考虑了一下这个问题之后,使用
parseFloat
意味着您不必删除所有内容——只需删除所需数字前的所有非数字字符和逗号。因此,我们可以将其分解为两个更简单的正则表达式(可能更快,特别是因为其中一个是非全局的)。然后,
parseFloat
将为您放弃尾随的非数字输入。

number = parseFloat(str.replace(/,/g,'').replace(/^[^-0-9]*/,''));

这里有一个稍微复杂一点的正则表达式

第二行:检查首字母“$”,并允许数字(0-9)和逗号的任意组合

第三行:删除数值中的前导$和任何逗号

我现在还不知道,但我想说的是JavaScript支持分组,在match语句中可以只使用逗号来表示数值,从而简化replace语句,只删除逗号

var str="$4,320 t3444ext/followme";
var regex = /^\$([0-9,])*/g;
var matchedNum = str.match(regex)[0].replace(/[\$,]/g, '');

我认为第一个非数字更健壮。它是数字,还是你想从文本中得到的数字?你能给我一些关于上述正则表达式的更多信息吗。。。我无法解释在正则表达式中有多么容易混淆……我建议从
(string | |“0”)
@zoom开始:它在一个空格上拆分,获取结果数组的第一个元素,并从中删除所有非数字<代码>字符串是你的主题字符串。我会马上测试,但我想这甚至会给我出现在第一个字母后面的数字。。。那么$4320 t778ext/folowme会给我432077?这是真的。如果空格标记数字的结尾,则可以将最后一个正则表达式更改为[^-.0-9]甚至[^-.0-9\s]。通过parseFloat或parseInt运行它,它将在第一个空格处停止,您将无法获得后续的数字。问题提到程序员正在寻找JavaScript正则表达式解决方案。
number = parseFloat(str.replace(/[^-.0-9\s]/g,''));
number = parseFloat(str.replace(/,/g,'').replace(/^[^-0-9]*/,''));
var str="$4,320 t3444ext/followme";
var regex = /^\$([0-9,])*/g;
var matchedNum = str.match(regex)[0].replace(/[\$,]/g, '');