匹配所有出现的数字,不带任何字母跟随或前面

时间:2017-06-23 18:17:01

标签: javascript regex

我正在努力实现的目标:

假设一个示例字符串:

1 this is a1 my test 1a 12 string 12.123 whatever 1

我想要一个正则表达式,它会给我所有出现的数字(包括浮点数),但是如果一个字母(或更一般地说:非数字)在它之前或之后,我希望它跳过该数字。因此a11a不匹配。

我一直在努力解决这个问题,我到了这一点(不理想,因为它也捕获了前面的空间):

/(^|\s)\d*\.*\d+/g

但这也会抓住1a实例......我也可以设置类似的内容,跳过1a,但会抓住a1 ...

我可以使用正则表达式匹配来完成此操作吗?

4 个答案:

答案 0 :(得分:1)

您可以在此正则表达式中使用单词边界:

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

RegEx Demo

答案 1 :(得分:0)

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

\d*\.*\d+

它从您开发的正则表达式中删除\s,它与前面的空格匹配。

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

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

答案 2 :(得分:0)

这不是一个正则表达式的答案,但也许这是一件好事,我们会看到。

此处使用的正则表达式为/^[-+]?(?:\d+(?:\.\d*)?|\d*\.\d+)(?:e\d+)?$/



var testStr = '.1 this is a1 my test +5 1a 12 string -2.4 12.123 whatever . .02e1 5e5.4 1 1.4e5 1.2.3';

console.log('matches');
console.log(...testStr
  .trim()
  .split(/\s+/g)
  .filter(word => /^[-+]?(?:\d+(?:\.\d*)?|\d*\.\d+)(?:e\d+)?$/
    .test(word)
  )
);

console.log('mismatches');
console.log(...testStr
  .trim()
  .split(/\s+/g)
  .filter(word => !/^[-+]?(?:\d+(?:\.\d*)?|\d*\.\d+)(?:e\d+)?$/
    .test(word)
  )
);




答案 3 :(得分:0)

试试这个词:Collections.synchronizedList(new ArrayList<YourClassNameHere>()) - Regex demo

支持JavaScript:(?<=^|\s)[-+]?(?:[0-9]*\.[0-9]+|[0-9]+)(?=$|\s) - Regex demo

此表达式支持带有可选符号的浮点数。

JS不支持积极的lookbehind,因此被非捕获组取代。这些数字由第一组捕获。