2017-04-11 69 views
1
string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, ''); 

string = string.replace(/[^a-zA-Z0-9]/g, ''); 

這是我在網上找到的代碼。我有點困惑。第一行代碼如何「排除」特殊字符,而第二行僅包含那些僅在[]中的字符。這兩種功能都是「替代」,那麼他們如何做完全相反的工作。替換函數如何以不同的方式工作?

+1

它是一個正則表達式https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions – epascarello

+0

https://regexper.com/#%2F%5B%5Ea-zA- Z0-9%5D%2Fg和https://regexper.com/#%2F%5B%26%5C%2F%5C%5C%23%2C%2B()%24~%25.'%22%3A *%3F%3C%3E%7B%7D%5D%2Fg – epascarello

+0

將不同的參數傳遞給'.replace'。對於不同的輸入來說,函數的返回值是不同的,這真令人驚訝嗎?如果您不瞭解正則表達式,請查看http://regular-expressions.info/開始。 –

回答

2

第一個正則表達式說:如果你找到這些字符中的任何一個,用什麼都替換它們。

第二個正則表達式說:如果您發現任何字符,這裏沒有列出,請將其替換爲無。

[^xyz]匹配除x,y或z之外的任何內容。關鍵的區別是'^',當它是[]中的第一個字符意味着不匹配!

這是一個很好的鏈接,它解釋了character classes and negated character classes

2

原因是插入符號(^)在前括號後面有特殊含義。它的意思是「不是以下」,所以當它用於替換時,它將取代除括號內的所有內容外的所有內容。

對於一個更爲雄辯的說明,請參閱this SO answer

第一個例子沒有左括號後插入符號,所以它會排除那些括號內任何東西。

+0

謝謝你的解釋。我真的搜索過這個,但並不滿意。 Thanx清理它。 – Ash

相關問題