首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有在没有后面跟着或后面加上Javascript中的字母时,才能匹配数字

只有在没有后面跟着或后面加上Javascript中的字母时,才能匹配数字
EN

Stack Overflow用户
提问于 2017-05-15 06:57:41
回答 3查看 933关注 0票数 1

我想匹配数字,但不匹配时,他们是在文字(在JavaScript)。

以下应与之相匹配:

代码语言:javascript
复制
1
1,2
1.5-4 (matches 1.5 & 4 separately)
(1+3) (matches 1 & 3 separately)
=1;

以下内容不应相匹配:

代码语言:javascript
复制
FF3D
3deg

我想我可以用消极的眼光来解决问题,就像这样:(?![A-Za-z]+)([0-9]+[\.|\,]?[0-9]?),但它不起作用。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-15 11:42:33

2021更新:

由于lookbehind支持有了很大的增长,因此使用基于查找的解决方案是有意义的:

代码语言:javascript
复制
/(?<![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字母)。

原始答案

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

代码语言:javascript
复制
/(?:\b\d+[,.]|\B[.,])?\d+\b/g

regex演示。这里的要点是,不能在\b之前使用单词边界.,因为它将使所有匹配(如.55 )无效(只有55匹配)。

详细信息

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

  • \d+ - 1+数字
  • \b -一个词的边界。

代码语言:javascript
复制
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));

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

代码语言:javascript
复制
/(?:\b\d+[,.]|\B[.,])?\d+(?:e[-+]?\d+)?\b/ig
票数 1
EN

Stack Overflow用户

发布于 2017-05-15 07:00:24

我想要匹配数字,但不是当他们是在词内。

您可以在regex中使用“查找”:

代码语言:javascript
复制
\b\d*[,.]?\d+\b
  • \b代表单词边界

RegEx演示

票数 3
EN

Stack Overflow用户

发布于 2017-05-15 12:25:02

尝尝这个

代码语言:javascript
复制
var pattern= /([\d.]+)/;

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43973210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档