关于检索关键字的常用四种方法

前端开发过程中,我们经常会遇到关于检索关键词的问题。遇到这类问题,我们通常会用下面的四个方法来解决检索关键词的问题:

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
relastIndex下一次匹配开始的位置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 = patt.exec(str)) != null)  {
  document.write(result);//输出W3School
  document.write("<br />");
  document.write(patt.lastIndex);//输出14
 }
</script>

 注意:不要把正则表达式字面量(或者正则表达式构造器)放在 while 条件表达式里。由于每次迭代时 lastIndex 的属性都被重置,如果匹配,将会造成一个死循环。   

  

 

转载于:https://www.cnblogs.com/hanqingtao/p/5564489.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux中,您可以使用`grep`命令从文件中检索关键字。`grep`命令是一个强大的文本搜索工具,它可以在文件或标准输入中搜索指定的字符串或模式,并显示匹配的行。 `grep`命令的基本语法如下: ``` grep [options] pattern [file] ``` 其中,`pattern`是要搜索的字符串或模式,`file`是要在其中进行搜索的文件名。如果省略`file`参数,则`grep`将从标准输入中读取数据进行搜索。 以下是一些常用的`grep`选项: - `-i`:忽略大小写进行搜索 - `-v`:显示不匹配的行 - `-n`:显示匹配行的行号 - `-c`:仅显示匹配行的数量 - `-r`:递归地搜索指定目录中的所有文件 - `-E`:使用扩展正则表达式进行搜索 以下是一些使用`grep`命令的示例: 1. 在文件中搜索指定字符串: ``` grep "keyword" myfile.txt ``` 2. 忽略大小写进行搜索: ``` grep -i "keyword" myfile.txt ``` 3. 显示不匹配的行: ``` grep -v "keyword" myfile.txt ``` 4. 显示匹配行的行号: ``` grep -n "keyword" myfile.txt ``` 5. 仅显示匹配行的数量: ``` grep -c "keyword" myfile.txt ``` 6. 递归地搜索指定目录中的所有文件: ``` grep -r "keyword" mydir/ ``` 7. 使用正则表达式进行搜索: ``` grep -E "[0-9]{3}-[0-9]{4}" myfile.txt ``` 这个例子将搜索文件`myfile.txt`中所有符合形式为`XXX-XXXX`的字符串。 请根据您的需求选择适当的选项和参数,并使用`grep`命令从文件中检索关键字

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值