2017-06-02 8 views
0

私はJavaSciptに新しい正規表現をテストしていますし、ユースケースの下に取り組んでいる -交換しないJavaScriptの正規表現「@」文字

要件 - LIST下からではありません「#」ですべての文字を置き換え -

  • 番号
  • 文字(大文字または小文字)
  • 除く任意の特殊文字 - >コンマ、ドット、大括弧、スラッシュ、単一引用符

以下の私のコードを探してください -

var replacedStr = str.replace(/[^a-zA-Z0-9'.-\[\], ]/g,"#"); 

出力をSTRの様々な値のためにしている -

str = "hello_"; 
    replacedStr is hello# 
    _______________________ 
    str = "[email protected]_"; 
    replacedStr is [email protected]# 

私は理由を知りたいと思った '@' 正規表現の上から置き換えられてISNOT。

同じ動作は、underScore、疑問符、角括弧でも同じです。

ご案内しています。元の正規表現で

おかげで、

Vibhav

+0

A-Zと同じように、.- \ []内のダッシュは文字の範囲を作成しています –

答えて

2

は、あなたのダッシュ(ハイフン)の範囲として解釈されている:

[^a-zA-Z0-9'.-\[\], ] 

これは、ドットから文字の範囲としてintepretedされています.まで、括弧[には、のアットマークが含まれています。あなたが否定文字クラスの最後にハイフンを移動した場合、正規表現は、意図したとおりに動作します:あなたの正規表現の間違いの

str = "[email protected]_"; 
 
str = str.replace(/[^a-zA-Z0-9'.\[\], -]/g,"#"); 
 
console.log(str);

0

カップルは、あなたが配置する必要があります「 - 」 charachterクラスの前で(または最後に)正規表現以下

あなたが正規表現の

0

ハイフンはあなたにエスケープシーケンスを追加する必要があり、したがって、範囲とさせていただきますを確認するためにhttp://www.regexpal.com/のようなオンラインテスターを使用することができますトリック

/[^.,\[\]\\'a-zA-Z0-9]/g 

を行いますそれ。

str.replace(/[^a-zA-Z0-9'.\-\[\]]/g,"#"); 
関連する問題