如何否定正则表达式声明?

时间:2016-05-25 19:53:28

标签: regex ecmascript-6 regex-negation

我一直在玩正则表达式高尔夫球,并确定了一个正则表达式,其中包含了我不应该匹配的所有单词以及我应该匹配的单词。我的想法是,我可以简单地否定正则表达式,然后反过来(包括我应该匹配的所有单词,而不包括其他单词)。

我提出的(\w)(\w)\2\1正则表达式匹配任何带有abba模式的内容,因此我认为使用负面外观(?!(\w)(\w)\2\1)会使我与任何不符合模式{{1}的内容相匹配但是现在它只是突出显示所有内容,如果你想尝试一下,请点击这里的网址:http://regex.alf.nu/4

1 个答案:

答案 0 :(得分:2)

在我看来,您希望排除包含那些重复符号的匹配字符串。因此,您需要在字符前添加\w*(0个或更多单词字符)以测试重复。

使用

^(?!\w*(\w)(\w)\2\1).*
    ^^^    

请参阅regex demo

因此,(?!\w*(\w)(\w)\2\1)前瞻在字符串的开头处执行以下检查:如果有0个以上的字母数字/下划线字符,后跟1和2个字符,其后是第2个字符,然后是第1个字符字符,不返回匹配项(匹配失败)。

如果您不打算匹配文本,则不需要.*部分(例如,如果您只是检查是否匹配)。但是,如果要排除匹配空字符串,只需使用.+代替.*+匹配 1次或多次出现的量化子模式)。