否定正则表达式的问题

时间:2015-05-01 17:49:31

标签: javascript regex regex-negation

我有几个正则表达式模式,我必须否定它们所有,所以我正在尝试构建somo通用正则表达式否定,类似/ ^(anypattern)/但我遇到麻烦..

例如,我有这样的文字:zzzzzAAAAA@AAAA_AAAzzzzzzAAAAA@AAAA.AAAggggggAAAAA@AAA.AAAooooooooo

和这种模式:[A-Z]+@[A-Z]+\\.[A-Z]{2,4},我需要一些东西来否定这一点。我会得到一个包含以下匹配的数组:

zzzzzAAAAA@AAAA_AAAzzzzzz , gggggg , ooooooooo

请注意,AAAAA@AAAA_AAA仅包含在内,因为它有一个_而不是一个点

我的正则表达式都很简单,没有任何这些特殊的caracteres:\ s,\ t,\ r,\ n,\ v,\ f,\ b等等。

我试图用负面的解释来解决它,但没有成功

1 个答案:

答案 0 :(得分:1)

尝试使用与正则表达式完全相同的拆分吗?

var input = "zzzzzAAAAA@AAAA_AAAzzzzzzAAAAA@AAAA.AAAggggggAAAAA@AAA.AAAooooooooo"
var output = input.split(/[A-Z]+@[A-Z]+\.[A-Z]{2,4}/)
console.log(output)

// outputs ["zzzzzAAAAA@AAAA_AAAzzzzzz", "gggggg", "ooooooooo"]

但是,您可能需要清空空元素,请考虑

var input = "AAAAA@AAAA.AAAzzzzzAAAAA@AAAA_AAAzzzzzzAAAAA@AAAA.AAAggggggAAAAA@AAA.AAAooooooooo"
var output = input.split(/[A-Z]+@[A-Z]+\.[A-Z]{2,4}/)
console.log(output)
// outputs ["", "zzzzzAAAAA@AAAA_AAAzzzzzz", "gggggg", "ooooooooo"]

设置输出变量后,您可以添加this answer

的礼貌
output = output.filter(function(n){ return n != undefined && n.length})
// which outputs ["zzzzzAAAAA@AAAA_AAAzzzzzz", "gggggg", "ooooooooo"]