从javascript中的字符串中提取所有数字
我想要给定字符串中所有正确的自然数从javascript中的字符串中提取所有数字,javascript,regex,Javascript,Regex,我想要给定字符串中所有正确的自然数 var a = "@1234abc 12 34 5 67 sta5ck over @ numbrs ." numbers = a.match(/d+/gi) 在上面的字符串中,我应该只匹配第一个单词5中的数字12、34、5、67,而不是1234等 所以数字应该等于[12,34,5,67]使用单词边界 > var a = "@1234abc 12 34 5 67 sta5ck over @ numbrs ." undefined > numbers
var a = "@1234abc 12 34 5 67 sta5ck over @ numbrs ."
numbers = a.match(/d+/gi)
在上面的字符串中,我应该只匹配第一个单词5中的数字12、34、5、67,而不是1234等
所以数字应该等于[12,34,5,67]使用单词边界
> var a = "@1234abc 12 34 5 67 sta5ck over @ numbrs ."
undefined
> numbers = a.match(/\b\d+\b/g)
[ '12', '34', '5', '67' ]
说明:
匹配单词字符(\b
)和非单词字符(\w
)的单词边界\w
一个或多个数字\d+
匹配单词字符和非单词字符的单词边界\b
> var myString = '@1234abc 12 34 5 67 sta5ck over @ numbrs .';
undefined
> var myRegEx = /(?:^| )(\d+)(?= |$)/g;
undefined
> function getMatches(string, regex, index) {
... index || (index = 1); // default to the first capturing group
... var matches = [];
... var match;
... while (match = regex.exec(string)) {
..... matches.push(match[index]);
..... }
... return matches;
... }
undefined
> var matches = getMatches(myString, myRegEx, 1);
undefined
> matches
[ '12', '34', '5', '67' ]
从中窃取的代码。如果有人对合适的正则表达式解决方案感兴趣,以匹配由空格字符包围的数字,那么对于支持的语言(如Perl和Python,但在编写时不支持JavaScript),这很简单:
然后,您只需要从匹配中提取该捕获组,例如,请参见为什么要这样做
\d+
匹配一个或多个数字,1234
是一个或多个。您在正则表达式周围使用了错误的斜杠;它应该是/\d+/gi
我知道它不是正确的正则表达式,我尝试了各种方法,但想不出正确的表达式。噢\b代表所有的空格?需要第一个\b
吗?@三段论不,它是单词和非单词字符(以任何顺序)之间的零宽度匹配,请参见@j08691-只要您不想匹配something123
中的123
就需要它。我认为这里不需要不区分大小写的匹配。@yitwail它在任何情况下都不适用于“@1234”
,从某种意义上说,它将与该字符串中的1234
匹配,而不考虑第一个\b
,因为@1
之间存在单词边界。但是javascript不支持lookbehind,所以需要一个讨厌的黑客来排除这种情况为什么要编辑javascript一个,你能把它放在那里吗?它与@Avinash的答案是重复的,你接受了这个答案。但我把它放回去了。
(?<=^|\s)\d+(?=\s|$)
(?:^|\s)(\d+)(?=\s|$)