我想匹配数字,但不是在单词内(在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]?)
但它不起作用。
我怎样才能最好地解决这个问题?感谢。
答案 0 :(得分:3)
答案 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)