关于检索关键字的常用四种方法
Posted 疯狂的小标点
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于检索关键字的常用四种方法相关的知识,希望对你有一定的参考价值。
在前端开发过程中,我们经常会遇到关于检索关键词的问题。遇到这类问题,我们通常会用下面的四个方法来解决检索关键词的问题:
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 ‘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() 即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。如果您需要这些全局检索的信息,可以使用 RegExp.exec()。
实例
<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.既可以找到关键字的位置,又可以返回关键字的位置:
RegExp.prototype.exec()-->exec() 方法
为指定的一段字符串执行搜索匹配操作。它的返回值是一个数组或者 null
。 如果你仅仅是为了知道是否匹配,可以使用 RegExp.test()
方法,或者 String.search()
方法。
语法
regexObj.exec(str)
参数
str
要用正则表达式匹配的字符串。
返回值
如果成功匹配,exec
方法返回一个数组,并且更新正则表达式对象的属性。返回的数组包括匹配的字符串作为第一个元素,紧接着一个元素对应一个成功匹配被捕获的字符串的捕获括号(capturing parenthesis)。(one item for each capturing parenthesis that matched containing the text that was captured.)
如果匹配失败,exec
方法将返回 null
。
描述
// 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 |
是否使用了‘ |
false |
|
source |
正则模式的字符串 | quick\s(brown).+?(jumps) |
实例
<script type="text/javascript"> var str = "Visit W3School"; var patt = new RegExp("W3School","g"); var result; while ((result = patt.exec(str)) != null) { document.write(result);//输出W3School document.write("<br />"); document.write(patt.lastIndex);//输出14 } </script>
注意:不要把正则表达式字面量(或者正则表达式构造器)放在 while
条件表达式里。由于每次迭代时 lastIndex
的属性都被重置,如果匹配,将会造成一个死循环。
以上是关于关于检索关键字的常用四种方法的主要内容,如果未能解决你的问题,请参考以下文章
关于js----------------分享前端开发常用代码片段