首页 > 解决方案 > 正则表达式在 regex101 中匹配,但在 TypeScript 正则表达式测试中不匹配

问题描述

我需要一个匹配 0.0 - 6.0 的数字的正则表达式,它还应该匹配 0,0 - 6,0 这样的逗号,最后但并非最不重要的是它应该匹配 0-6 的数字。

我是正则表达式的新手,因此不介意我的正则表达式是否完全错误。

我当前的正则表达式是->/(^[0-5][.|,]\d$)|(^[6][.|,][0]$)|(^[0-6]$)/gms

这匹配 regex101 中的所有情况,但不匹配我的打字稿代码。

在代码中,我匹配我的字符串如下:

/(^[0-5][.|,]\d$)|(^[6][.|,][0]$)|(^[0-6]$)/gms.test(stringToTest)

这匹配 0-6 和 0.0-6.0 但不匹配 0,0-6,0。我怎样才能改进我的正则表达式,它的工作原理如 regex101 所示?

在此先感谢您的帮助。

标签: regextypescript

解决方案


你可以使用

^(?:[0-5](?:[.,][0-9])?|6(?:[.,]0)?)$
  • ^线的开始
  • (?:非捕获组
    • [0-5]匹配一个数字 0-5
    • (?:[.,][0-9])?可选择匹配一个.,后跟一个数字 0-9
    • |或者
    • 6第 6 场比赛
    • (?:[.,]0)?)可选地匹配一个.a.,后跟一个 0
  • $行结束

正则表达式演示

请注意,您不需要字符类中的管道[.|,],这意味着匹配管道字符而不是 OR。[6]不必在方括号之间。

您不需要该/s标志,因为该模式确实使用了一个.也应该匹配换行符的点。

const regex = /^(?:[0-5](?:[.,][0-9])?|6(?:[.,]0)?)$/gm;

推荐阅读