2017-06-02 47 views
0

我是新來javascipt的和測試正則表達式,並正在下面用例 -JavaScript的正則表達式而不是取代「@」字符

要求 - 每一個字符用「#」是不是從下面列表更換 -

  • 字符(大寫或小寫)
  • 除外的任何特殊字符 - >逗號,點,方括號中,斜線,單引號

請在下面找到我的代碼 -

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

輸出的STR的各種值是 -

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

我想知道爲什麼 '@' 狀態並沒有被從上面的正則表達式替換。

相同的行爲是與字符 - 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類(或最後)前面。

下面的正則表達式會做的伎倆

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

您可以通過在線測試儀像http://www.regexpal.com/檢查正則表達式的

0

連字符將被視爲一個範圍,因此你需要一個轉義序列添加到它。

str.replace(/[^a-zA-Z0-9'.\-\[\]]/g,"#"); 
相關問題