2016-07-28 54 views
3

這裏是我的字符串:如何反轉模式的匹配結果?

Organization 2 
[email protected] [email protected] [email protected] [email protected] 
Organization 3 
[email protected] [email protected] 

而且這是我的模式:

/^.*[email protected][^ ]+|^.*$/gm 

正如您在demo看到,模式匹配這樣的:

Organization 2 
[email protected] 
Organization 3 
[email protected] 

我的問題:怎麼可以我把它倒過來?我的意思是我要匹配這樣的:

[email protected] [email protected] [email protected] 
[email protected] 

我怎麼能這樣做?其實我可以寫一個新的(和完全不同)模式來搶預期結果,但我想知道,是「反轉模式的結果」可能嗎?

+0

什麼東西阻止你扭轉字符串,然後只使用原始正則表達式?也許你可以使用某種逆序,但是重要的是什麼? –

+0

@TimBiegeleisen該點匹配與模式不匹配的所有內容。 – Shafizadeh

+0

Upvoted。也許@Wiktor會知道這個答案。 –

回答

3

不,我不認爲有一種方法可以直接反轉正則表達式,否則保持不變。

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

是的..從原始值中刪除匹配的值給了我我正在尋找的東西。 Thx +1。只是我很好奇我是如何通過純正則表達式來實現這一點的。 – Shafizadeh

+0

很高興幫助。請注意,我的答案仍然只是一個單純的正則表達式行,只是使用'RegExp.replace'而不是'RegExp.match'。 – rgthree

1

您可以通過使用Array.prototype.forEach()以取代第一RegExp比賽:

但是,您可以通過使用現有的正則表達式用一個空字符串替換其比賽後實現了接近你在做什麼用`String.ptototype.replace();替換空字符串匹配的RegExp;

var re = str.match(/^.*[email protected][^ ]+|^.*$/gm); 
var res = str; 
re.forEach(val => res = res.replace(new RegExp(val), "")); 
+0

是的..從原始值中刪除匹配的值給我什麼,我正在尋找。 Thx +1。只是我很好奇我是如何通過純正則表達式來實現這一點的。 – Shafizadeh

+0

「純正規表達式」是什麼意思? – guest271314

+0

我的意思是在[這裏](https://regex101.com/r/kN3eR5/2#javascript)這樣做..我想匹配什麼是替代框。 – Shafizadeh