• js中适用于正则匹配的RegExp 对象方法和String对象方法


    最近项目中一直要用的正则,而且也不是匹配常用的正则规则比如手机号和身份证号之类了,所以就把正则语法看了遍。上篇文章有关于正则的语法和正则在线转换工具。

    今天总结下 js中适用于正则匹配的RegExp对象和String对象的方法。(里面的知识点主要是参考于w3c)

    一,先说RegExp对象的方法

    方法名 语法 参数 返回值 说明 案例
    test()
    RegExpObject.test(string)
     string:必需是字符串
     
    如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false
     
    调用 RegExp 对象 r 的 test() 方法,并为它传递字符串 s,与这个表示式是等价的:(r.exec(s) != null)。可以匹配全局
     
    var str = "Visit W3School";
    var patt1 = new RegExp("W3School");
    var result = patt1.test(str); document.write("Result: " + result);
    //输出:Result: true
    exec()
    RegExpObject.exec(string)
     string:必需是字符串  返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

    1,如果是非全局RegExp对象与返回的数组与调用方法 String.match() 返回的数组是相同的。

    2,如果是全局RegExp对象的时候它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。exec() 都会把完整的细节添加到它返回的数组中而match不会。所以在循环中反复地调用 exec() 方法是唯一一种获得全局模式的完整模式匹配信息的方法。

     

    var str = "Visit W3School, W3School is a place to study web technology.";
    var patt = new RegExp("W3School","g");
    var result;

    while ((result = patt.exec(str)) != null) {
    document.write(result);
    document.write("<br />");
    document.write(patt.lastIndex);
    document.write("<br />");
    }

    输出:

    W3School
    14
    W3School
    24

     compile() RegExpObject.compile(regexp,modifier)

     regexp:正则对象

    modifier:匹配类型

     无  

    compile() 方法用于在脚本执行过程中编译正则表达式。

    compile() 方法也可用于改变和重新编译正则表达式。

     
    var str="Every man in the world! Every woman on earth!";
    
    patt=/man/g;
    str2=str.replace(patt,"person");
    document.write(str2+"<br />");
    
    patt=/(wo)?man/g;
    patt.compile(patt);
    str2=str.replace(patt,"person");
    document.write(str2);
    输出
    Every person in the world! Every woperson on earth!
    Every person in the world! Every person on earth!

    二,再说String对象的检测查询方法。这些方法都使用于字符串和正则的匹配

         

    方法名 语法 参数 返回值 说明 案例
    search() stringObject.search(regexp)  regexp:可以是字符串也可以说RegExp对象  stringObject 中第一个与 regexp 相匹配的子串的起始位置。如果没有找到任何匹配的子串,则返回 -1。  search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。  
    var str="Visit W3School!"
    document.write(str.search(/w3school/i))
    

     输出:6

     match()  
    stringObject.match(searchvalue)
    stringObject.match(regexp)
     
    searchvalue:字符串
    regexp:正则
     返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

     1,非全局RegExp对象match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。

    2,全局RegExp对象match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性。

    3,在全局检索模式下,match() 即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。如果您需要这些全局检索的信息,可以使用 RegExp.exec()。如果需要循环对每个相匹配的内容去做一系列的操作的话就用RegExp.exec()。

     
    var str="Hello world!"
    document.write(str.match("world") + "<br />")
    document.write(str.match("World") + "<br />")
    document.write(str.match("worlld") + "<br />")
    document.write(str.match("world!"))
    输出:
    world
    null
    null
    world!
     replace()  
    stringObject.replace(regexp/substr,replacement)

     regexp/substr:字符串或者正则对象

    replacement:一个字符串值。规定了替换文本或生成替换文本的函数。

     

    一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。

     

    字符串 stringObject 的 replace() 方法执行的是查找并替换的操作。它将在 stringObject 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。

    replacement 可以是字符串,也可以是函数。如果它是字符串,那么每个匹配都将由字符串替换。但是 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。

    字符替换文本
    $1、$2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
    $& 与 regexp 相匹配的子串。
    $` 位于匹配子串左侧的文本。
    $' 位于匹配子串右侧的文本。
    $$ 直接量符号。

    注意:ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。


    例子 1

    在本例中,我们将使用 "W3School" 替换字符串中的 "Microsoft":

    <script type="text/javascript">
    
    var str="Visit Microsoft!"
    document.write(str.replace(/Microsoft/, "W3School"))
    
    </script>
    

    输出:

    Visit W3School!

    例子 2

    在本例中,我们将把 "Doe, John" 转换为 "John Doe" 的形式:

    name = "Doe, John";
    name.replace(/(w+)s*, s*(w+)/, "$2 $1");

    例子 3

    在本例中,我们将把字符串中所有单词的首字母都转换为大写:

    name = 'aaa bbb ccc';
    uw=name.replace(/w+/g, function(word){
      return word.substring(0,1).toUpperCase()+word.substring(1);}
      );
     split()   stringObject.split(separator,howmany)

     separator:字符串或正则表达式

    howmany:可选。该参数可指定返回的数组的最大长度

     一个字符串数组  

    注释:如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。

    注释:String.split() 执行的操作与 Array.join 执行的操作是相反的。

     

    例子 1

    在本例中,我们将按照不同的方式来分割字符串:

    <script type="text/javascript">
    
    var str="How are you doing today?"
    
    document.write(str.split(" ") + "<br />")
    document.write(str.split("") + "<br />")
    document.write(str.split(" ",3))
    
    </script>

    输出:

    How,are,you,doing,today?
    H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,?
    How,are,you

    例子 2

    在本例中,我们将分割结构更为复杂的字符串:

    "2:3:4:5".split(":")	//将返回["2", "3", "4", "5"]
    "|a|b|c".split("|")	//将返回["", "a", "b", "c"]
    

    例子 3

    使用下面的代码,可以把句子分割成单词:

    var words = sentence.split(' ')

    或者使用正则表达式作为 separator:

    var words = sentence.split(/s+/)
  • 相关阅读:
    UIPickerView
    visual studio2010生成get方法和set方法快捷键
    vmware安装mac虚拟机键盘失灵解决方法
    运行android模拟器过大
    [SQL Utility] How to retrieve Oracle’s version info?
    【读书笔记】c# in depth (1)
    [Oracle 10g] About Recycle bin
    [Oracle Troubleshooting] Get Oracle Bounces When Data File Is Missing
    [Oracle Mgmt]Clone Oracle Database Manually
    [SQL*PLUS]Set Up Sql*Plus
  • 原文地址:https://www.cnblogs.com/keaizhouzhou/p/5691735.html
Copyright © 2020-2023  润新知