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


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

    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 = /quicks(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'标记使正则工作在多行模式(也就是,^ 和 $ 可以匹配字符串中每一行的开始和结束(行是由 或 分割的),而不只是整个输入字符串的最开始和最末尾处。)

    false
    source 正则模式的字符串 quicks(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 的属性都被重置,如果匹配,将会造成一个死循环。   

      

  • 相关阅读:
    Linux入门实践笔记(二)——Jar包的运行与关闭
    SpringCloud从入门到进阶(二)——注册中心Eureka的伪分布式部署
    Linux入门实践笔记(一)——安装JDK与运行jar包
    探究ConcurrentHashMap中键值对在Segment[]的下标如何确定
    探究HashMap线性不安全(三)——死循环的产生
    jmeter集成测试报告
    jmeter+ant+jenkins持续集成设置
    jmeter-环境配置与安装
    MySql 基本语法_数据表操作
    MySql 基本语法_数据库操作
  • 原文地址:https://www.cnblogs.com/hanqingtao/p/5564489.html
Copyright © 2020-2023  润新知