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