這是一個很久以前的事情了,好像是安心兄弟在學習js的時候做的練習。
具體記不清了,今天就來簡單分析下 search 究竟是什么用的。
從字面意思理解,一個是搜索字符串吧。
1
2
|
var
str =
"123456789abcde"
;
console.log( str.search(
"abc"
) );
// 9
|
確實是搜索指定字符在一個字符串中出現的位置,如果不存在就返回 -1
可是這樣就跟 indexOf 功能一樣了,何必單獨搞一個 search 出來呢?
1
2
3
4
5
|
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 只是按字符串匹配的。
來看一個例子:
1
2
3
4
5
6
7
|
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) 轉為正則的。
好了,今天的分享就這些了。明天見。。