這是一個很久以前的事情了,好像是安心兄弟在學習js的時候做的練習。
具體記不清了,今天就來簡單分析下 search 究竟是什么用的。
從字面意思理解,一個是搜索字符串吧。
var str = "123456789abcde"; console.log( str.search("abc") ); // 9
確實是搜索指定字符在一個字符串中出現的位置,如果不存在就返回 -1
可是這樣就跟 indexOf 功能一樣了,何必單獨搞一個 search 出來呢?
var str = "123456789abcde"; console.log( str.search("abc") ); // 9 console.log( str.indexOf("abc") ); // 9 console.log( str.search("xxx") ); // -1 console.log( str.indexOf("xxx") ); // -1
點擊右側運行可查看輸出結果。
其實區別在於 search 是強制正則的,而 indexOf 只是按字符串匹配的。
來看一個例子:
var str = "123456789.abcde"; // 比剛才多了一個 . 而已 console.log( str.search(".") ); // 0 因為正則 . 匹配除\n以外任意字符 console.log( str.indexOf(".") ); // 9 只能匹配字符 . console.log( str.search("\\.") ); // 9 相當於 new RegExp("\\.") console.log( str.indexOf("\\.") ); // -1 匹配字符 \. 所以不存在 console.log( str.search(/\./) ); // 9 正則匹配轉以后的 . 字符 console.log( str.indexOf(/\./) ); // -1 相當於匹配字符串 "/\./" 所以不存在
這個例子可以很好的說明 search 強制正則匹配模式。
來看下 MDN 上是怎么說的吧《String.prototype.search()》
可以看到他給出的語法是 str.search(regexp) 格式,說明參數必須是正則,如果不是正則,也會調用 new RegExp(obj) 轉為正則的。
好了,今天的分享就這些了。明天見。。