2016-07-28 8 views
3

は私の文字列です:どのようにパターンの結果を逆にすることができますか?ここ

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

また、これは私のパターンです:あなたがdemoで見たよう

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

、パターンはこれに一致します。

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

私の質問:どうすればいいですか?私は逆にする?私はこれと一致したいと思うことを意味します:

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

どうすればいいですか?実際に私は新しい結果を得るために新しい(と完全に異なる)のパターンを書くことができますが、私は知りたいですは "パターンの結果を反転"は可能ですか?

+0

文字列を逆順にしてから元の正規表現を使用することをやめることは何ですか?たぶんあなたは何らかの形の見た目を使うことができるかもしれませんが、何がポイントになるでしょうか? –

+0

@TimBiegeleisenポイントはパターンと一致しないものすべてにマッチしています。 – Shafizadeh

+0

Upvoted。たぶん@Wiktorはこれに対する答えを知っているでしょう。 –

答えて

3

いいえ、正規表現を直接逆にする方法はないと思います。あなたがにArray.prototype.forEach()を用いて、第1 RegExpからマッチを置き換えることができます

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

うん..元の値から一致した値を削除すると、私が探しているものが得られます。 Thx +1。ちょうど私が純粋な正規表現でそれをどうやってできるのか不思議です。 – Shafizadeh

+0

喜んで助けてください。私の答えは、単に 'RegExp.match'の代わりに' RegExp.replace'を使うだけで、単なる純粋な正規表現の行であることに注意してください。 – rgthree

1

ただし、空の文字列とのマッチを置き換えるために、既存の正規表現を使用した後、あなたがしているものに近いものを達成できます`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

関連する問題