Javascript 在字符串中匹配多个数字的正则表达式

Javascript 在字符串中匹配多个数字的正则表达式,javascript,regex,Javascript,Regex,我想从字符串中提取数字,例如 这三个镇有1000人 得到一个类似于[1000,3]的数组 我从中获得了与正则表达式匹配的以下数字 这对于检查它是否是一个数字非常有用,但要使它在句子中起作用,您需要删除^and$ 如果没有定义开始和结束,您会得到一组0长度匹配,这些匹配很容易被丢弃,但现在它也会使用逗号拆分任何数字 我如何使那个正则表达式或一个新正则表达式在句子上工作,但仍然能找到带有逗号的数字。 如果允许不同的组,例如1,00000,在某些地区并不未知,那么表达式/-?\d:[,\d]*\.

我想从字符串中提取数字,例如

这三个镇有1000人

得到一个类似于[1000,3]的数组

我从中获得了与正则表达式匹配的以下数字

这对于检查它是否是一个数字非常有用,但要使它在句子中起作用,您需要删除^and$

如果没有定义开始和结束,您会得到一组0长度匹配,这些匹配很容易被丢弃,但现在它也会使用逗号拆分任何数字

我如何使那个正则表达式或一个新正则表达式在句子上工作,但仍然能找到带有逗号的数字。 如果允许不同的组,例如1,00000,在某些地区并不未知,那么表达式/-?\d:[,\d]*\.\d+[,\d]*/g也可以这样做。我觉得我应该能够进一步简化,但是当我尝试这个例子时,333.33被分解成333和33,作为单独的数字。有了以上这些,它就保持在一起了

实例:

const str=这3个城镇有10000人。大约每个城镇有3333.33人。与去年相比约为-67.33。; const rex=/-?\d?:[,\d]*\.\d+|[,\d]*/g; 让我们比赛; 而match=rex.execstr!==空的{ console.logmatch[0]; } 表达式/-?\d?:[,\d]*\.\d+|[,\d]*/g应该这样做,如果您同意允许不同的组,例如在某些地区并不未知的1,00000。我觉得我应该能够进一步简化,但是当我尝试这个例子时,333.33被分解成333和33,作为单独的数字。有了以上这些,它就保持在一起了

实例:

const str=这3个城镇有10000人。大约每个城镇有3333.33人。与去年相比约为-67.33。; const rex=/-?\d?:[,\d]*\.\d+|[,\d]*/g; 让我们比赛; 而match=rex.execstr!==空的{ console.logmatch[0];
} 匹配整数和十进制数,其中整个部件可以有可选的 位于数字之间但不在小数部分的逗号是这样做的:

/[+-]?:?:\d?:,?=\d?+?:\。\d*?\124;\。\ d+/

输入示例并不反映此正则表达式处理的所有边界条件。
最好进行实验,看看它的全部效果

匹配整数和小数,其中整个部分可以有可选的 位于数字之间但不在小数部分的逗号是这样做的:

/[+-]?:?:\d?:,?=\d?+?:\。\d*?\124;\。\ d+/

输入示例并不反映此正则表达式处理的所有边界条件。
最好进行实验,看看它的全部效果

另一种方法是用空格分割,看看该值是否可以解析为一个数字

让numberExtractor=str=>str.split/\s+/ .filterv=>v&&parseFloatv.replace/[,]/g,
console.lognumberExtractor'这3个镇上有1000人。还有一些数字-23.012 1,00000,00'另一种方法是用空格分割,看看该值是否可以解析为一个数字

让numberExtractor=str=>str.split/\s+/ .filterv=>v&&parseFloatv.replace/[,]/g,
console.lognumberExtractor'这3个镇上有1000人。更多的数字-23.0121,00000,00'非常感谢!我添加了\.\d+?最后是小数。@SamDean-啊,说得好!但我认为这还不够,一秒钟。@SamDean-我已经更新了它来处理小数,很抱歉我错过了。这比仅仅添加\.\d+要复杂得多?在它之后-@SamDean-嗯…我们没有处理负号。:-那么你可能想要一个-?在前面。A[+-]?如果你想允许一元+也。非常感谢!我添加了\.\d+?最后是小数。@SamDean-啊,说得好!但我认为这还不够,一秒钟。@SamDean-我已经更新了它来处理小数,很抱歉我错过了。这比仅仅添加\.\d+要复杂得多?在它之后-@SamDean-嗯…我们没有处理负号。:-那么你可能想要一个-?在前面。A[+-]?如果你想允许一元+的话。当你在一个被接受的答案之后发布一个答案时,指出前一个答案没有处理的是什么是很有用的,这样人们可以更容易地看到这一点,并认识到附加答案的好处。如果没有任何内容或内容不重要,那么根本不发布可能是最好的,小事情可以在answers.@TJ.Crowder上发表评论-只需说明它的作用,并说明应探索正则表达式的所有边界效应。与公认的答案大不相同。@Thefourthbird-它可能是尾随的圆点,将其区分为浮点数。但是,考虑到逗号的位置可能不在数千个地方,它是一个混乱的规范。当在一个被接受的答案之后发布一个答案时,指出它所处理的是前一个答案所不能处理的是很有用的,这样人们就可以更容易地看到它,并认识到逗号的好处
附加答案。如果没有任何内容或内容不重要,那么根本不发布可能是最好的,小事情可以在answers.@TJ.Crowder上发表评论-只需说明它的作用,并说明应探索正则表达式的所有边界效应。与公认的答案大不相同。@Thefourthbird-它可能是尾随的圆点,将其区分为浮点数。但是,考虑到逗号可以出现在非数千个位置,它是一个混乱的规范。
^[+-]?(\d*|\d{1,3}(,\d{3})*)(\.\d+)?\b$