zoukankan      html  css  js  c++  java
  • js正则表达式

    正则表达式(regular expression)是一个描述字符模式的对象。javascript的RegExp类表示正则表达式,string和RegExp都定义了方法,后者使用正则表达式进行强大的模式匹配和文本检索与替换功能。javascript的正则表达式,是perl5的正则表达式语法的大型子集。

    javascript的正则表达式用RegExp表示,可以使用RegExp()构造函数来创建RegExp对象,不过RegExp对象更多是通过一种特殊的的直接量语法来创建。就像通过引号包裹字符的方式来定义字符串直接量一样,正则表达式直接量定义为包含在一对斜杠(/)之间的字符,例如

      var pattern = /s$/;

    运行这段代码创建一个新的RegExp对象,并将它赋值给pattern。用构造函数也可以定义与之等价的正则表达式

    var pattern = RegExp("s$");

    1. 字符类

    [...]   表示方括号内的任意字符
    [^...]  表示不在方括号内的任意字符
    .       除换行符和其他Unicode行终止符之外的任意字符
    w      任何ASCII字符组成的单词,等价于[a-zA-Z0-9]
    W      任何不是ASCII字符组成的单词,等价于[^a-zA-Z0-9]
    s      任何Unicode空白符
    S      任何非Unicode空白符
    d      任何ASCII数字,等价于[0-9]
    D      任何非ASCII数字,等价于[^0-9]
    []    退格直接量

    2. 重复

    {n,m}     匹配前一项至少n次,但不能超过m次
    {n,}      匹配前一项n次或更多次
    {n}       精确匹配前一项n次
    ?         匹配前一项0次或者1次,等价于{0,1}
    +         匹配前一项1次或更多次,等价于{1,}
    *         匹配前一项0次或更多次,等价于{0,}

    3. 正则表达式的选择,分组和引用字符

    |          选择,匹配的是该符号左边的子表达式或右边的子表达式
    (...)      组合,将几项组合为一个单元,这个单元可以通过“*”,“+”,“?”,“|”等符号加以修饰,而且可以记住和这个组合相匹配的字符串以供以后的引用使用
    (?:...)    只组合,把项组合到一个单元,但不记忆与该项相匹配的字符
    
             和第n个分组第一次匹配的字符相匹配,组是圆括号中的子表达式(也有可能是潜嵌套的),组索引是从左到右的左括号数,“(?:”形式的分组不编码

    4. 正则表达式中的锚字符

    ^       匹配字符串的开头,在多行检索中,匹配一行的开头
    $       匹配字符串的结尾,在多行检索中,匹配一行的结尾
          匹配一个单词的边界
    B      匹配非单词的边界
    (?=p)   零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符
    (?!p)   零宽负向先行断言,要求接下来的字符不与p匹配

    5. 正则表达式的修饰符

    i     执行不区分大小写的匹配  
    g     执行一个全局匹配,简言之,即找到所有的匹配,而不是在找到第一个之后就停止
    m     多行匹配模式,^匹配一行的开头和字符串的开头,$匹配行的结束和字符串的结束

    6. 正则表达式用于模式匹配的string方法

      string支持4种正则表达式的方法。

      1. search():他的参数是一个正则表达式,返回第一个与之匹配的字符串起始位置,如果找不到匹配的字符串,则返回-1;如果search()的参数不是正则表达式,则会首先调用Regexp的构造函数,将它转换为正则表达式,search()不支持全局检索,因为他忽略正则表达式修饰符g。

        例:’javascript‘.search(/script/i);

      2. replace(): 用以执行检索和替换操作其第一个参数是正则表达式,第二个参数是要进行替换的字符串。如果正则表达式设置了修饰符g,则进行全局检索并替换,如果不设置g,则只替换查找到的第一项。如果replace()的第1个参数是字符串而不是正则表达式,则replace()将直接搜索这个字符串,而不是想serrach()一样,首先通过RegExp(),将它转换为正则表达式。

        例:var text = ’php css html javascript‘;

          text.replace(/javascript/gi,'JavaScript');   //将text中的javascript替换为JavaScript。

      3. match(): 是最常用的string正则表达式方法。他的唯一参数是一个正则表达式。返回的是一个有匹配结果组成的数组。如果设置了修饰符g,则该方法返回的数组中包含字符串中的所有匹配结果。

        例:"1 plus 2 plus 3".match(/d+/g);  // 返回['1','2','3']

      如果没有修饰符g,match()不会进行全局检索,他之检索第一个匹配,这时也返回一个数组,在这种情况下,数组的第一个元素就是匹配的字符串。余下的元素是正则表达式中,用圆括号括起来的子表达式的匹配的子字符串。此时match()方法和RegExp的exec()方法一样。

      4. split(): 该方法将调用他的字符串拆分一个子串组成的数组,使用的分隔符是split()的参数。split()方法的参数也可以时一个正则表达式。

        例:"abc,def,ghj".split(',');   // 返回['abc','def','ghj']

    7 RegExp对象

      RegExp()构造函数带有两个字符串参数,其中第二个是可选的,RegExp()用以创建新的RegExp对象。第一个参数包含正则表达式的主体部分,也就是正则表达式中直接量中两条斜线之间的文本。不论是直接量还是正则表达式的,都是用’‘作为字符串转义字符的前缀。第二个参数是正则表达式的修饰符,只能传入g,i,m或他们的组合。

      例:var zipcode = RegExp("\d{5}","g");

      RegExp的属性

        1. source:包含正则表达式的文本

        2. global:布尔值,说明正则表达式是否带有修饰符g

        3. ignoreCase:布尔值,说明是否带有修饰符i

        4. multiLine:布尔值,说明是否带有修饰符m

        5. lastIndex:可读写的整数,如果匹配模式带有修饰符g,这个属性存储 在字符串中下一次检索的开始位置,这个属性会被exec()和test()方法用到

      RegExp方法

        1. exec()  和match()方法没有修饰符g一样

        2. test() 他的参数是一个字符串,用test()对某个字符串进行检测,如果包含正则表达式的一个匹配结果,则返回true。

  • 相关阅读:
    recurse_array_change_key_case()递规返回字符串键名全为小写或大写的数组
    php循环创建目录
    ajaxFileUpload增加附加参数
    dedecms5.7 联动类型无法显示
    一些比较隐秘的OJ的网址
    Emacs 配置
    qwq
    233
    [八省联考2018]林克卡特树lct
    [APIO2014]序列分割
  • 原文地址:https://www.cnblogs.com/huntaheart/p/3560129.html
Copyright © 2011-2022 走看看