2017-04-23 64 views
2

在JavaScript中,在string中搜索regex匹配項的語法是string.search(regex)。與match,replacesplit類似。爲什麼JavaScript中的語法regex.test(string)而不是string.test(regex)?

那麼爲什麼在test的情況下正則表達式/字符串順序顛倒了,如regex.test(string)?爲什麼不是string.test(regex)與其他正則表達式函數一樣?

+2

因爲'test'是'RegExp'對象的一個​​方法。所以你正在測試正則表達式來匹配一個字符串。不是一個語法問題只是一個內置的方法。如果這是你想要的,你可以實現你自己的String.test方法。 http://jsbin.com/bejikabedi/1/edit?js,console – Gerardo

+0

當然可以,但是從語法本身來看,這一切都很清楚,所以並沒有真正解釋它。爲什麼'test'是'RegExp'對象的一個​​方法,而'match'等不是? – globewalldesk

+1

我想一個簡單的方法來思考它是,一個字符串不能'測試'一個正則表達式,但它使得一個正則表達式測試一個字符串的總意義。 – sisanared

回答

2

那麼,爲什麼在測試的情況下正則表達式/字符串順序顛倒了,如regex.test(string)?爲什麼不是string.test(regex)與其他正則表達式函數一樣?

因爲這是語言設計的方式。 SO並不是討論或猜測這種語言設計決定的地方,在許多情況下,背景在時間的迷失中失去了。

如果你是在具有String#test功能,因此意圖,然後

String.prototype.test = function(re) { return re.test(this); }; 

String.prototype.test = function(re) { return this.search(re) !== -1; }; 

所有關於增強內置類型的原型的危害正常的告誡。

+0

傻了,我認爲SO是討論這種語言設計決定的地方。 – globewalldesk

相關問題