选择不在两个表达式之间的字符(:)

时间:2018-07-13 18:53:23

标签: regex

我遇到一个小问题,无法选择字符':',该字符不在':'前后的两位数字之间。以下是示例:

user1:18 (should match)
date:2018-06-28 16:12:09 (should match : after 'date')
dueDate:28 (should match)
details:none (should match)

在演示中,我只看到了前两位。有人可以帮我吗?

Demo

3 个答案:

答案 0 :(得分:2)

/:[^\d]|[^\d]:/匹配任何以非数字开头或以非数字开头的冒号。这样够了吗?

答案 1 :(得分:2)

在逻辑上合适的正则表达式是

(?<!\d):|:(?!\d)

:后面没有数字,或者:后面没有数字(与所有:都匹配,除了两边都被数字包围的数字)。

看起来gsub中的mutate只是调用了Ruby的本机gsub,它支持先行和先行((?! )(?<! ),分别)。

答案 2 :(得分:1)

/:(?=[^\d])|(?<=[^\d]):/

使用断言,可以避免为了断言而消耗字符。