我想匹配数字,但不匹配时,他们是在文字(在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]?),但它不起作用。
我怎么才能最好地解决这个问题?谢谢。
发布于 2017-05-15 11:42:33
2021更新:
由于lookbehind支持有了很大的增长,因此使用基于查找的解决方案是有意义的:
/(?<![a-z])\d*[.,]?\d+(?![a-z])/gi # ASCII only
/(?<!\p{L})\p{N}*[.,]?\p{N}+(?!\p{L})/giu # Unicode-aware见regex演示。请追踪这里支持查找和Unicode属性类。。
详细信息
(?<![a-z]) -不允许任何ASCII字母(或使用\p{L}时的任何Unicode字母)立即位于当前位置的左侧\d*[.,]?\d+(?![a-z]) -不允许在当前位置的右侧立即使用ASCII字母(如果使用\p{L},也不允许任何Unicode字母)。原始答案
为了匹配任何以点或逗号作为小数分隔符的独立整数或浮点数,您需要
/(?:\b\d+[,.]|\B[.,])?\d+\b/g见regex演示。这里的要点是,不能在\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发布于 2017-05-15 07:00:24
发布于 2017-05-15 12:25:02
https://stackoverflow.com/questions/43973210
复制相似问题