正则表达式某些角色可以存在与否,但之后没有

时间:2013-11-27 23:43:46

标签: java javascript regex

我是regex的新手,我正在尝试搜索几个字符串。

我想检查一下某个字符,在这种情况下,字符串中是否存在“:”(不带引号)。

如果:字符串中不存在它仍然匹配,但如果:存在,则只有空格和新行才允许存在。

我有这种模式,但似乎没有按照我想要的方式工作。

(.*)(:?\s*\n*)

谢谢。

2 个答案:

答案 0 :(得分:5)

如果我正确理解您的问题,^[^:]*(:\s*)?$

让我们稍微分解一下:

^开始锚;如果没有这个,匹配可以在每次看到另一个冒号或冒号后的非空格时重新启动。

[^:]*匹配任何非冒号字符的字符数;这样,如果整个字符串都是非冒号字符,则该字符串将被视为有效匹配。

(:\s*)?如果在任何时候我们执行看到冒号,则所有后续字符必须是空格,直到字符串结尾;分组parens和跟随?的行为使这成为一个全有或全无的条件陈述。

$结束锚;如果没有这个,正则表达式将不知道如果它看到冒号,则后面的空格必须持续到字符串的结尾。

答案 1 :(得分:1)

这是一个应该起作用的模式

/^([^:]*|([^:]*:\s*))$/

您可以使用管道来管理替代方案