Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从javascript中的字符串中提取所有数字_Javascript_Regex - Fatal编程技术网

从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|$)