Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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,我正在努力实现的目标: 假设一个示例字符串: 1 this is a1 my test 1a 12 string 12.123 whatever 1 我希望有一个正则表达式,它可以给我所有出现的数字(包括浮点数),但如果前面或后面有字母(或者更一般地说:非数字),我希望它跳过数字。所以a1和1a不匹配 我已经为此奋斗了一段时间,我达到了这一点(不理想,因为它也抓住了前面的空间): 但这也将捕获1a实例。。。我也可以设置类似的设置,它将跳过1a,但将捕获a1 我可以使用正则表达式匹配来实现这一点

我正在努力实现的目标:

假设一个示例字符串:

1 this is a1 my test 1a 12 string 12.123 whatever 1
我希望有一个正则表达式,它可以给我所有出现的数字(包括浮点数),但如果前面或后面有字母(或者更一般地说:非数字),我希望它跳过数字。所以
a1
1a
不匹配

我已经为此奋斗了一段时间,我达到了这一点(不理想,因为它也抓住了前面的空间):

但这也将捕获
1a
实例。。。我也可以设置类似的设置,它将跳过
1a
,但将捕获
a1


我可以使用正则表达式匹配来实现这一点吗?

对于简单但不全面的解决方案(假设给定示例字符串中使用了数字类型,没有负数、科学符号等),请尝试以下方法:

\d*\.*\d+
它从您开发的正则表达式中删除与前面空格匹配的
\s

\d*
将匹配所有数字(数字[0-9])


添加
\.*\d+
将匹配浮点(十进制后跟数字[0-9])。

您可以将单词边界用于此正则表达式:

/(?:\.\d+|\b\d+(?:\.\d+)?)\b/g

这不是一个只有正则表达式的答案,但这可能是一件好事,我们拭目以待

这里使用的正则表达式是
/^[-+](?:\d+(?:\。\d*)?\d*\。\d+(:e\d+)$/

var testStr='.1这是我的测试+5 1a 12字符串-2.4 12.123,随便什么。02e1 5e5.4 1 1.4e5 1.2.3';
log('matches');
console.log(…testStr)
.trim()
.split(/\s+/g)
.filter(word=>/^[-+]?(?:\d+(?:\。\d*)?\d*\。\d+(:e\d+)$/
.测试(word)
)
);
console.log(“不匹配”);
console.log(…testStr)
.trim()
.split(/\s+/g)
.filter(word=>!/^[-+]?(?:\d+(?:\。\d*)?\d*\。\d+(:e\d+)$/
.测试(word)
)

);尝试以下表达式:
(?“包含浮动”:不匹配
1.4e5
和浮点数的假阳性,中间没有空格:并且你也可以在不匹配中包含有符号的数字,例如
-1.23
。如果OP有任何这些要求,我当然可以解决。应该适用于这些情况。非常好。我只是在玩魔鬼代言人,但我仍然不知道最后的tw是否正确o应该匹配,因为它们不被空格分隔。这个表达式可以匹配像20.42字这样的数字:怎么样…正数和负数
+1
-1
?指数表示法
1e1
?数字分隔符
1000000.00
1000
?我不需要指数表示法。数字分隔符确实是一个很酷的加法(obv除了空格之外,因为在这种情况下这些应该被视为单独的数字)。在句子中查找数字的问题在于,你不知道点是句点还是浮点数。不知道,如果点后面紧跟着一个数字,那么很明显它应该被视为一个数字。否则,它后面会跟着一个空格。
/(?:\.\d+|\b\d+(?:\.\d+)?)\b/g