2017-03-19 1 views
0

申し訳ありませんが、検索エンジンで検索方法を混乱させました。答えを探したいものについて...正規表現の一部をキャッチするにはjavascriptのいくつかの要件がありますか?

文字列の一部を正規表現で置き換えますが、要件はありません。結果に含まれます。ここでは例:

私が前にいないバックスラッシュと記号(で)@を置き換えたい...

私は "文字列" .replace(/ [^ \\] @/g)を使用している場合、それはなりますスラッシュ、それが帰ってきた以外にも...、アットマークの前の文字 を交換

string.replace(、「置き換え」/ [^ \\] @/g)の前の例と同じ宛先を持つ

より多くの情報。

  • ABC \ @まだ
  • ABCは@(私はこれがが発生しませたい)
  • ABCは@ AB C置き換えとして交換abReplacedとして交換(私が欲しいもの)のABCの\ @として保持(私が欲しいものは@の前の文字、Cの文字は置き換えられません)

    結論は、バックスラッシュをつけたすべての@記号ですが、取り返しがつかない/置き換えられますが、前にバックスラッシュがないと、/@の前の文字に置き換えられましたあなたがカバーする必要が

    var res = '[email protected]'.replace(/([^\\|^])@/g, '$1Replaced'); 
     
    
     
    console.log(res);

    注:GN

+0

シングル '\' 'ことを意味[^ \] 'それ\ breakst]は\\ –

+1

でなければなりません。あなたの3つの例は、非常に不明です。そこにはっきりとしたパターンはありません。あなたの言葉の説明は素晴らしいと思うが、テキストはそれをサポートしていない。 –

答えて

1

正規表現でのこの質問に対する一般的な答えは、ネガティブ・ルック・ビハインドアサーションを使用することです。しかしJavaScriptには見た目がありません。あなたのケースでは

、あなただけ(もしあれば)の前に文字をキャプチャし、交換の一部としてそれを出力し直すことができます。

result = string.replace(/(^|[^\\])@/, "$1Replaced"); 

^|部分は例えば、前にいない文字を可能にすることです、文字列の先頭。|交代、例えば、^または[^\\]である。)

あなたは世界的にそれを行うにしたい場合は(、あなたもをお勧めしますフラグ)

正規表現でリテラルのバックスラッシュを使用するには、別のバックスラッシュでエスケープする必要があります。

例(置き換えるグローバルためgを使用して):

function test(string) { 
 
    console.log(string, "=>", string.replace(/(^|[^\\])@/g, "$1Replaced")); 
 
} 
 
test("abc\\@"); 
 
test("[email protected]"); 
 
test("@[email protected]");

1

はキャプチャグループでそれを行うと、その文字を再現するために置き換える引数に$1を入れ置き換え/ catchedされません@が文字列の最初の文字である可能性があるため、正規表現には一致しません。代わりに、文字列(^)の先頭に一致させることでこれを解決してください。

0

あなたがこれを行うことができます:

const data = [ 
 
    '[email protected]', 
 
    'test\\@asd.asdf', 
 
    '@test\\@asd.asdf' 
 
] 
 

 
const removeAtSymbol = str => str.replace(/([^\\])@|^@/g, '$1') 
 

 
for (const item of data){ 
 
    console.log(item, '->', removeAtSymbol(item)) 
 
}

関連する問題