首页 > 解决方案 > 正则表达式:匹配除数字、空格、逗号、分号、'am' 和 'pm' 之外的任何内容

问题描述

我正在尝试检查传入的字符串是否包含与定义时间段无关的任何符号,因此我试图找到一个匹配除数字、空格、逗号、分号、“am”和“pm”之外的任何内容的正则表达式.

这就是我的想法,但这仍然匹配 am 和 pm:/([^,:-\d\s])+/

如何添加ampm例外?

不幸的是,谷歌搜索没有帮助。这是带有上述表达式的正则表达式的链接和要测试的文本:https ://regexr.com/5ber7

标签: regex

解决方案


您可以使用

(?:(?![ap]m)[^,:\d\s-])+(?<![ap]m)

查看正则表达式演示

它之所以有效,是因为排除的字符串只有两个字符长。详情

  • (?:(?![ap]m)[^,:\d\s-])+- 一个或多个字符,而不是数字,、、、:空格,并且-不开始一个ampm字符序列
  • (?<![ap]m)-在当前位置之前不允许am或允许。pm

推荐阅读