【问题标题】:How to write regular expression for this case?这种情况下如何写正则表达式?
【发布时间】:2019-01-18 04:31:10
【问题描述】:

我想在 javascript 中编写一个正则表达式来匹配以下有效场景。稍后,如果我必须使用组提取,那么我将能够这样做。

我已经尝试了下面的正则表达式,但它没有给我想要的模式。

/[0-9][+-[0-9]+]*/

正则表达式应该能够匹配“有效”场景。

// 有效的 64344 9434 434-543 434-543 434 - 543 4435 - 343434 1-2,3,5,6 1-2,3,5,6-6,45-4 3,5,6, 8 - 9,24 1-2,3,5,6 1- 2,3, 5,6-6,45-4 // 无效的 23 - 2343.3434 343.3434 - 13.466 23 , 234, ,54 xyz 9 3,5,6,8-9,24, ,35,65,65 ,35,65,65 - ,3 5,65,65, 3,5,6, 8- 9,24, 1- 2,3, 5,6-6,4 5-4 , 35,65,6 5 ,35, 6 5,65,

【问题讨论】:

  • 示例很有帮助,但不是示例,您还应该描述正则表达式应该匹配的内容以及您尝试使用您编写的内容来完成什么。跨度>
  • 我不确定为什么人们不赞成这个问题。提供的正则表达式几乎涵盖了所有有效情况regexr.com/46l4l用户只需要多一点帮助,似乎他不知道自己在做什么。
  • 我同意 Ry-,似乎这些只是随机的例子。我不知道它实际上应该做什么
  • 我认为给定的样本足以得出他真正想要的结论,尽管我同意如果他在其背后添加一些基本原理以使其更精确会有所帮助
  • 这是开始学习如何编写解析器的好时机:D

标签: javascript regex


【解决方案1】:

查看您的示例,我觉得您想要的是一个逗号分隔的数字,其中一些可以像1-2 一样排列,并且它们之间以及字符串的开头或结尾也有可选的空格。这是您可以使用的正则表达式,

^\s*\d+(?:\s*-\s*\d+\s*)?(?:\s*,\s*\d+(?:\s*-\s*\d+)?)*\s*$

说明:

  • ^ - 字符串开始
  • \s* - 输入开头的可选空格
  • \d+ - 只匹配一个或多个数字
  • (?:\s*-\s*\d+\s*)? - 这匹配像这样的范围数字 -2 可以在其中包含空格,最后的 ? 表示范围部分是可选的
  • (?:\s*,\s*\d+(?:\s*-\s*\d+)?)* - 此正则表达式部分确保数字可以用逗号分隔,其中的 \d+(?:\s*-\s*\d+)? 部分启用 2-3 形式的数字,其中 ? 表示它可以只是纯数字而没有范围部分和 @987654334 @whole of this 可以是零次或多次
  • \s* - 输入末尾的可选空格
  • $ - 输入结束

Live Demo

【讨论】:

  • 非常感谢您的重播。它工作正常。
  • 很高兴知道我能够访问您的要求并能够帮助您解决问题,但就像其他人也说的那样,您还应该在帖子背后给出一些理由,因为它确实可以帮助其他人帮助您。我只是查看了您的阳性样本,只是为了创建正则表达式,它会自动拒绝您的无效样本,我确信这确实是您需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
相关资源
最近更新 更多