如何反转模式的匹配结果?

时间:2016-07-28 04:31:02

标签: javascript regex

这是我的字符串:

Organization 2
info@something.org.au more@something.com market@gmail.com single@noidea.com 
Organization 3
headmistress@money.com head@skull.com  

这也是我的模式:

/^.*?@[^ ]+|^.*$/gm

正如您在demo中看到的那样,模式符合以下条件:

Organization 2
info@something.org.au 
Organization 3
headmistress@money.com 

我的问题:如何让它反转?我的意思是我想要匹配这个:

more@something.com market@gmail.com single@noidea.com
head@skull.com

我该怎么做?实际上我可以编写一个新的(和完全不同的)模式来获取预期的结果,但我想知道,“反转模式的结果”可能吗?

2 个答案:

答案 0 :(得分:3)

不,我不相信有一种方法可以直接反转正则表达式,但保持不变。

但是,通过使用现有的RegExp将其匹配替换为空字符串,您可以获得与之相近的内容:

var everythingThatDidntMatchStr = str.replace(/^.*?@[^ ]+|^.*$/gm, '');

答案 1 :(得分:1)

您可以使用RegExp替换第一个Array.prototype.forEach()的匹配项,以使用`String.ptototype.replace();

将匹配的RegExp替换为空字符串
var re = str.match(/^.*?@[^ ]+|^.*$/gm);
var res = str; 
re.forEach(val => res = res.replace(new RegExp(val), ""));