正则表达式只有在Javascript中没有跟随或继续字母时才匹配数字

时间:2017-05-15 06:57:42

标签: javascript regex

我想匹配数字,但不是在单词内(在JavaScript中)。

以下内容应符合:

1
1,2
1.5-4 (matches 1.5 & 4 separately)
(1+3) (matches 1 & 3 separately)
=1;

以下内容不匹配:

FF3D
3deg

我认为我可以用负面的前瞻来解决,例如:(?![A-Za-z]+)([0-9]+[\.|\,]?[0-9]?)但它不起作用。

我怎样才能最好地解决这个问题?感谢。

3 个答案:

答案 0 :(得分:3)

  

我想匹配数字,但不是当它们在单词中时。

您可以在正则表达式中使用环顾:

(...)
  • (?:...)用于字边界

RegEx Demo

答案 1 :(得分:1)

为了将任何独立的整数或浮点数与点或逗号作为小数分隔符匹配,您需要

/(?:\b\d+[,.]|\B[.,])?\d+\b/g

请参阅regex demo。这里的要点是你不能在\b之前使用单词边界.,因为它会使所有匹配项失效,例如.55(仅匹配55)。

<强>详情:

  • (?:\b\d+[,.]|\B[.,])? - 两种选择中的任何一种:
    • \b\d+[,.] - 一个单词边界(字符串之前或之后必须有非单词字符),然后是1+位数,然后是.,
    • | - 或
    • \B[.,] - 除了字边界以外的位置(只有非字母字符或字符串的开头),然后是.,
  • \d+ - 1+位数
  • \b - 一个单词边界。

const regex = /(?:\b\d+[,.]|\B[.,])?\d+\b/g;
const str = `.455 and ,445 44,5345 435.54 4444
1
1,2
1.5-4
(1+3)
=1;

FF3D
3deg`;
console.log(str.match(regex));

如果您还需要添加对指数使用的支持:

/(?:\b\d+[,.]|\B[.,])?\d+(?:e[-+]?\d+)?\b/ig

答案 2 :(得分:0)

试试这个

var pattern= /([\d.]+)/;

https://regex101.com/r/q1qDHV/1