【发布时间】:2010-09-26 03:06:09
【问题描述】:
对于 JavaScript 来说还是个新手,我无法辨别何时使用其中的每一个。
谁能帮我澄清一下?
【问题讨论】:
标签: javascript string
对于 JavaScript 来说还是个新手,我无法辨别何时使用其中的每一个。
谁能帮我澄清一下?
【问题讨论】:
标签: javascript string
如果您需要正则表达式,请使用search()。否则,indexOf() 会更快。
【讨论】:
search 会将字符串评估为正则表达式,即使您不想这样做。
"hello.".search(".") - 它返回 0,而不是 5,因为 . 是“任何字符”的正则表达式标记
搜索函数 (one description here) 采用正则表达式,允许您匹配更复杂的模式、不区分大小写的字符串等,而 indexOf (one description here) 仅匹配文字字符串。但是,indexOf 也允许您指定起始索引。
【讨论】:
indexOf() 和 search()
两者通用
i) 返回第一次出现的搜索值
ii) 如果未找到匹配项,则返回 -1
let str='Book is booked for delivery'
str.indexOf('b') // returns position 8
str.search('b') // returns position 8
indexOf() 的特殊之处
i) 你可以将起始搜索位置作为第二个参数
str.indexOf('k') // 3
str.indexOf('k',4) // 11 (it start search from 4th position)
搜索值可以是正则表达式
str.search('book') // 8
str.search(/book/i) // 0 ( /i =case-insensitive (Book == book)
【讨论】:
IndexOf() - 它接受字符串文字或字符串对象,但 not 正则表达式。它还接受一个从零开始的整数值来开始搜索,例如:
Search() - 接受字符串文字或字符串对象和正则表达式。但它不接受开始搜索的索引。
【讨论】:
"baby/e/lephant".indexOf(m); 返回什么?
【讨论】:
没有regex,indexOf 和search 之间没有实际区别。
下面的例子给出了一个实时的demo:
function FromSearch() {
var str = document.getElementById("demo").innerText;
var n = str.search("difference");
document.getElementById("Location").innerHTML = n;
}
function FromindexOf() {
var str = document.getElementById("demo").innerText;
var n = str.indexOf("difference");
document.getElementById("Location").innerHTML = n;
}
<p id="demo">Without a <a href='http://www.w3schools.com/js/js_regexp.asp'>regex</a>, there is no practical difference between <a href='http://www.w3schools.com/jsref/jsref_indexof.asp'>indexOf</a> and <a href='http://www.w3schools.com/jsref/jsref_search.asp'>search</a>
</p>
<button onclick="FromSearch()">From search</button>
<button onclick="FromindexOf()">From indexOf</button>
<p>Location of difference in the above sentence is:</p>
<mark id="Location"></mark>
【讨论】:
search 将字符串转换为RegExp,例如str.search("d........e"); 也会匹配到第 39 个字符。