【问题标题】:Regex everything but number with two decimals正则表达式除带两位小数的数字外的所有内容
【发布时间】:2014-05-27 21:58:03
【问题描述】:

对于喜欢正则表达式的人,我有一个很好的挑战;像我这样的。不幸的是,我无法弄清楚这一点。

这个正则表达式是一个反向匹配。我需要匹配除适量之外的所有东西;喜欢:

这些类型需要不匹配:

0,00
0.00
12314345.7
24234.54
34435,00
34545,43

这些类型需要 MATCH:

.00
,87
1e3,67

因此,除了带有逗号或点的小数之外的所有内容都需要在 JavaScript 中匹配(是的,反向)。

我做了这个:

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

但是,很明显,它不能正常工作,因为它通过多个逗号或点,并且不会将小数限制为最多两位。

【问题讨论】:

  • 你能提供一个示例输入和输出吗?
  • 如果您愿意,可以在regexr.com 上进行测试,这就是“匹配”和“不匹配”可见的地方。
  • 但是你为什么需要它呢?我想为有效模式制作正则表达式是相当简单的,任何不满足正则表达式的都是你的解决方案。还是只是为了挑战?
  • 如果你可以分割一个字符(比如空格),那么:s.split(/\s+/).filter(function(v) {return !/^\d+[\.,]\d\d$/.test(v)}) 可以完成这项工作(即过滤掉匹配项)。
  • @RobG 询问正则表达式应该运行的格式化输入。输入格式会影响正则表达式。例如在您编辑问题之前,您输入的是逐行值。

标签: javascript regex


【解决方案1】:

使用负前瞻的解决方案:

^(?!\d+([,.]\d{0,2})?$).*$

http://regex101.com/r/jY3tC3

注意:这个正则表达式需要锚定。我在^$ 之间锚定。

【讨论】:

  • 这很好!快到了。它在“1.”、“1”上失败,但也在“1.55555555”上失败。
  • 再一次。我没有 \d{0,2}。
  • 赢家鸡肉晚餐!像它应该的那样工作并匹配所有不正确的值。
【解决方案2】:

试试这个:

/^(?!(\d+[\.,]\d+)).*$/gm

查看更新后的demo here

【讨论】:

  • 嗨 Onur。对不起,那个不行。但我也可以说它不起作用。您正在过滤 a-zA-Z,而我想过滤除 0-9 之外的所有内容。
  • [a-z] 更改为 [\D][^0-9] 以匹配任何非数字。
  • 这是被接受的:“aasdd.dd”和这个“1e34333.ff”。所以这不好。不错的解决方案,我喜欢它。
  • 在这些上失败:fff,00 1e34 hufreh pokrg,ji
猜你喜欢
  • 2019-12-11
  • 1970-01-01
  • 2023-03-08
  • 2017-08-29
  • 2011-09-08
  • 2020-03-18
  • 2014-08-10
  • 2012-04-05
  • 1970-01-01
相关资源
最近更新 更多