关于检索关键字的常⽤四种⽅法
在前端开发过程中,我们经常会遇到关于检索关键词的问题。遇到这类问题,我们通常会⽤下⾯的四个⽅法来解决检索关键词的问题:1.检索⼀个固定的关键词:
  1.1 String.prototype.indexOf()-->indexOf() ⽅法返回指定值在字符串对象中⾸次出现的位置。从 fromIndex 位置开始查,如果不存在,则返回-1。
语法:
str.indexOf(searchValue[, fromIndex])
参数:
 searchValue
    ⼀个字符串表⽰被查的值。
 fromIndex可选
  可选表⽰调⽤该⽅法的字符串中开始查的位置。可以是任意整数。默认值为 0。如果fromIndex < 0则
查整个字符串(如同传进了0)。如果fromIndex >= str.length,则该⽅法返回 -1,除⾮被查的字符串是⼀个空字符串,此时返回 str.length。
描述:
字符串中的字符被从左向右索引。⾸字符的索引(index)为 0,字符串stringName的最后⼀个字符的索引是stringName.length - 1。
"Blue Whale".indexOf("Blue");    // returns  0
"Blue Whale".indexOf("Blute");    // returns -1
"Blue Whale".indexOf("Whale", 0); // returns  5
"Blue Whale".indexOf("Whale", 5); // returns  5
"Blue Whale".indexOf("", 9);      // returns  9
"Blue Whale".indexOf("", 10);    // returns 10
"Blue Whale".indexOf("", 11);    // returns 10
区分⼤⼩写
indexOf⽅法区分⼤⼩写。例如,下⾯的表达式返回 -1:
"Blue Whale".indexOf("blue") // returns -1
检测是否存在某字符串
当检测某个字符串是否存在于另⼀个字符串中时,可使⽤下⾯的⽅法:
"Blue Whale".indexOf("Blue") !== -1; // true
"Blue Whale".indexOf("Bloe") !== -1; // false
1.2 String.prototype.indexOf()-->lastIndexOf()⽅法返回调⽤字符串中的索引对象指定的最后出现的位置,从fromIndex向后搜索。如果没有到该值返回-1。
语法:
str.lastIndexOf(searchValue[, fromIndex])
参数:
 searchValue
    ⼀个字符串表⽰被查的值。
 fromIndex 可选
  可选表⽰调⽤该⽅法的字符串中开始查的位置。可以是任意整数。默认值为 0。如果fromIndex < 0则查整个字符串(如同传进了0)。如果fromIndex >= str.length,则该⽅法返回 -1,除⾮被查的字符串是⼀个空字符串,此时返回 str.length。
描述:
字符串中的字符被从左向右索引。⾸字符的索引(index)为 0,字符串stringName的最后⼀个字符的索引是stringName.length - 1。
'canal'.lastIndexOf('a');    // returns 3
'canal'.lastIndexOf('a', 2);  // returns 1
'canal'.lastIndexOf('a', 0);  // returns -1
'canal'.lastIndexOf('x');    // returns -1
'canal'.lastIndexOf('c', -5); // returns 0
'canal'.lastIndexOf('c', 0);  // returns 0
'canal'.lastIndexOf('');      // returns 5
javascript全局数组'canal'.lastIndexOf('', 2);  // returns 2
区分⼤⼩写
lastindexOf⽅法区分⼤⼩写。例如,下⾯的表达式返回 -1:
'Blue Whale, Killer Whale'.lastIndexOf('blue'); // returns -1
2.检索有没有相应关键字: 
String.prototype.search()-->String.prototype.search()⽅法执⾏⼀个搜索匹配正则表达式字符串对象。
语法:
str.search(regexp)
参数: 
regexp
  该参数可以是需要在 stringObject 中检索的⼦串,也可以是需要检索的 RegExp 对象。
  注释:要执⾏忽略⼤⼩写的检索,请追加标志 i。
说明
search() ⽅法不执⾏全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进⾏检索,这意味着它总是返回 stringObject 的第⼀个匹配的位置。
实例
function testinput(re, str) {
var midstring;
if (str.search(re) != -1) {
midstring = ' contains ';
} else {
midstring = ' does not contain ';
}
console.log(str + midstring + re);
}
 search()⽅法对⼤⼩写敏感 :
<script type="text/javascript">
var str="Visit W3School!"
document.write(str.search(/w3school/))//输出-1
</script>
 在本例中,我们将执⾏⼀次忽略⼤⼩写的检索: 
<script type="text/javascript">
var str="Visit W3School!"
document.write(str.search(/w3school/i))//输出为6
</script>
3.检索所有关键词的内容: 
 String.prototype.match()-->match() ⽅法可在字符串内检索指定的值,或到⼀个或多个正则表达式的匹配。该⽅法类似 indexOf() 和lastIndexOf(),但是它返回指定的值,⽽不是字符串的位置。
 语法:
str.match(regexp)
参数: 
searchvalue必需。规定要检索的字符串值。
regexp必需。规定要匹配的模式的 RegExp 对象。如果该参数不是 RegExp 对象,则需要⾸先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。
返回值
存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。
说明
match() ⽅法将检索字符串 stringObject,以到⼀个或多个与 regexp 匹配的⽂本。这个⽅法的⾏为在很⼤程度上有赖于 regexp 是否具有标志 g。
如果 regexp 没有标志 g,那么 match() ⽅法就只能在 stringObject 中执⾏⼀次匹配。如果没有到任何匹配的⽂本, match() 将返回 null。否则,它将返回⼀个数组,其中存放了与它到的匹配⽂本有关的信息。该数组的第 0 个元素存放的是匹配⽂本,⽽其余的元素存放的是与正则表达式的⼦表达式匹配的⽂本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。index 属性声明的是匹配⽂本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引⽤。
如果 regexp 具有标志 g,则 match() ⽅法将执⾏全局检索,到 stringObject 中的所有匹配⼦字符串。若没有到任何匹配的⼦串,则返回null。如果到了⼀个或多个匹配⼦串,则返回⼀个数组。不
过全局匹配返回的数组的内容与前者⼤不相同,它的数组元素中存放的是stringObject 中所有的匹配⼦串,⽽且也没有 index 属性或 input 属性。
注意:在全局检索模式下,match() 即不提供与⼦表达式匹配的⽂本的信息,也不声明每个匹配⼦串的位置。如果您需要这些全局检索的信息,可以使⽤ ()。
实例
<script type="text/javascript">
var str="1 plus 2 equal 3"
document.write(str.match(/\d+/g))//输出1,2,3
</script>
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var regexp = /[A-E]/gi;
var matches_array = str.match(regexp);
console.log(matches_array);
// ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
 4.既可以到关键字的位置,⼜可以返回关键字的位置: 
 ()-->exec() ⽅法为指定的⼀段字符串执⾏搜索匹配操作。它的返回值是⼀个数组或者。 如果你仅仅是为了知道是否匹配,可以使⽤⽅法,或者⽅法。
语法
<(str)
参数
str要⽤正则表达式匹配的字符串。
返回值
如果成功匹配,exec⽅法返回⼀个数组,并且更新正则表达式对象的属性。返回的数组包括匹配的字符串作为第⼀个元素,紧接着⼀个元素对应⼀个成功匹配被捕获的字符串的捕获括号(capturing pare
nthesis)。(one item for each capturing parenthesis that matched containing the text that was captured.)
如果匹配失败,exec⽅法将返回。
描述
// Match "quick brown" followed by "jumps", ignoring characters in between
// Remember "brown" and "jumps"
// Ignore case
var re = /quick\s(brown).+?(jumps)/ig;
var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');
下⾯的表格展⽰这个脚本的返回值:
对象属性/索
描述例⼦
result [0]匹配的全部字符串Quick Brown Fox Jumps
[1], ...[n]括号中的分组捕获
[1] = Brown
[2] = Jumps
index匹配到的字符位于原始字符串的基于0的索引值4
input原始字符串
The Quick Brown Fox
Jumps Over The Lazy Dog
re lastIndex下⼀次匹配开始的位置25
ignoreCase是否使⽤了'i'标记使正则匹配忽略⼤⼩写true
global是否使⽤了'g'标记来进⾏全局的匹配.true
multiline
是否使⽤了'm'标记使正则⼯作在多⾏模式(也就是,^ 和 $ 可以匹配字符串中每⼀⾏的开始和结
束(⾏是由 \n 或 \r 分割的),⽽不只是整个输⼊字符串的最开始和最末尾处。)
false
source正则模式的字符串quick\s(brown).+?(jumps)
实例
<script type="text/javascript">
var str = "Visit W3School";
var patt = new RegExp("W3School","g");
var result;
while ((result = (str)) != null)  {
document.write(result);//输出W3School
document.write("<br />");
document.write(patt.lastIndex);//输出14
}
</script>
 注意:不要把正则表达式字⾯量(或者正则表达式构造器)放在while条件表达式⾥。由于每次迭代时lastIndex的属性都被重置,如果匹配,将会造成⼀个死循环。   

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。