【问题标题】:Why the plus operator not working in regex in JavaScript? [duplicate]为什么加号运算符在 JavaScript 的正则表达式中不起作用? [复制]
【发布时间】:2019-01-01 23:48:57
【问题描述】:

我是 JavaScript 新手,我制作了正则表达式来验证例如十进制值。 (10.12, 100.22, 5.5 etc)。它接受 3 位数字和 2 位小数。我在https://regex101.com/ 上测试了这个正则表达式,它工作正常。

/^[0-9]{1,3}+(\.[0-9]{1,2})?$/

但是当我在 Vue 中使用这个正则表达式时,问题就来了,正则表达式中使用的加号 (+) 运算符给出了错误:

Invalid regular expression: /^[0-9]{1,3}+(\.[0-9]{1,2})?$/: Nothing to repeat 

【问题讨论】:

  • 在 regex101.com 中从 php 切换到 javascript - 它也抱怨语法
  • 拥有“1 到 3 个数字,至少一次”有什么意义?这与“1 个或多个数字”相同!
  • 我在regex101.com 上测试了这个正则表达式,它工作正常。 - 不,it does not 如果你测试正确。

标签: javascript regex


【解决方案1】:

+ 表示在这种情况下不需要“一个或多个”,因为您需要完全匹配一个。

在第一部分周围添加圆括号以匹配整数和小数部分。

var n = '120.50';
var m1 = n.match(/^[0-9]{1,3}(\.[0-9]{1,2})?$/);
var m2 = n.match(/(^[0-9]{1,3})(\.[0-9]{1,2})?$/);
console.log(m1, m2);

【讨论】:

  • 正确答案是删除+。量化 (^[0-9]{1,3}) 没有意义(尽管会产生正确的结果),因为 字符串开头 位置不能超过 1 个。
  • 确实如此。如果要匹配数字的整数部分和小数部分,则需要括号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
相关资源
最近更新 更多