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

    1.语法:var regExp=/pattern/flags;

    flags:g:全局模式;i:不区分大小写;m:多行匹配模式

    2.举例:

    regExp=/at/g:匹配所有含有"at"的实例;

    regExp=/[bc]at/i:匹配第一个"bat"或"cat",不区分大小写;

    regExp=/.at/gi;匹配所有以at结尾的不区分大小写的实例;

    对于符号需要反斜杠转义:

    regExp=/[bc]at/i:匹配第一个“ [bc]at”,不区分大小写;

    regExp=/.at/:匹配所有".at",不区分大小写;

    3.regExp构造函数:接收两个参数:一个需要匹配的字符串模式,一个是可选的标志字符串。(可以使用字面量定义的任何表达式都可以使用构造函数来定义)

    regExp=/[bc]at/i;

    等同的构造函数表达:regExp=new RegExp("[bc]at","i");

    /[bc]at/ = "\[bc\]at"

    /name/age/ = "name\/age"

    /d.d{1,2}/ = "\d.\d{1,2}"

    /w\hello\123/ = "/\w\\hello\\123"

    4.在ECMAScript3中,正则表达式字面量始终会共享一个RegExp实例,而是用构造函数创建的每一个新的RegExp实例都是一个新的实例。

    5.RegExp实例属性:global(布尔值,是否设置了全局g标志),ignoreCase(布尔值,是否设置了i标志),lastIndex(整数,表示开始搜索下一个匹配的字符位置,从0算起),multiline(布尔值,表示是否设置了m标志),source(正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回)。

    var regExp=/[bc]at/i = var regExp=new RegExp("\[bc\]at","i");

    regExp.global;//false;

    regExp.ignoreCase;//true

    regExp.multiline;//false;

    regExp.lastIndex;//0

    regExp.source;//"[bc]at/"

    6.(...)代表捕获匹配;

    var text="mom and dad and baby";

    var pattern=/mom (and dad ( and baby)?)?/gi;

    var matches=pattern.exec(text);

    matches.index;//0

    matches.input;//"mom and dad and baby"

    matches[0];//"mom and dad and baby"

    matches[1];//"and dad and baby"

    matches[2];//"and baby"

    解释:最内部捕获组:“and baby”;第二个捕获组:"and dad"或者"and dad and baby",字符串传入exec方法之后,发现了匹配项,index属性为0;第一项是匹配的整个字符串,第二项匹配第一个捕获组内容,第三个匹配第二个捕获组内容。

    7.test方法:接收一个字符串参数,在模式匹配该参数时返回true,否则返回false;

    var text="000-00-0000";

    var pattern = /d{3}-d{2}-d{4}/;

    pattern.test(text);//true

    toString方法&toLocalString()方法:返回正则表达式的字面量,与创建表达式的方法无关:

    var pattern = new RegExp("\[bc\]at","gi");

    pattern.toString();// /[bc]at/gi

    pattern.toLocalString();// /[bc]at/gi

    其他方法:regExp.exec;  

         regExp.test;  

         string.match;  

         string.replace;

         string.search;

         string.split;

    8.RegExp 构造函数属性:

    input==$_         最近一次要匹配的字符串(Opera未实现)

    lastMatch == $&        最近一次的匹配项(Opera未实现)

    lastParen == $+    最近一次匹配的捕获组(Opera未实现)

    leftContext == $`    input字符串中lastMatch之前的文本

    multiline == $*      布尔值,表示是否所有表达式都使用多行模式(IE 和 Opera未实现)

    rightContext == $'    input字符串中lastMatch之后的文本

    var text="this has been a short summer"

    var pattern = /(.)hort/g

    if(pattern.test(text)){

    RegExp.input;== RegExp.$_            //this has been a short summer

    RegExp.leftContext;== RegExp["$`"]      //this has been a

    RegExp.rightContext;== RegExp["$'"]      //summer

    RegExp.lastMatch;== RegExp["$&"]       //short

    RegExp.lastParen;== RegExp["$+"]      //s

    RegExp.mulitiline;== RegExp["$*"]      //false

    }

    pattern=/(..)or(.)/g

    RegExp.$1 //sh

    RegExp.$2 //t

    9.模式的局限性

    开始:^    结尾:$

    s:单行匹配模式     x:无间隔匹配模式

    (? : ...)?表示一个非捕获型分组,后缀?表示这个分组是可选的;

    一个捕获型分组会复制它所匹配的文本,并把其放到result数组里,第一个捕获型分组的编号是1.。。

    [...]表示一个字符类,连字符(-)表示范围XXX到XXX

    后缀+表示这个字符类会被匹配一次或多次;

    后缀{1,3}表示这个字符类会被匹配0次或者1~3次;

    *表示这个字符类会被匹配0次或多次;

    .会匹配除行结束符以外的所有字符;

     ===========================================================================================================补充:

    :匹配一个单词的边界;B:匹配一个单词的非边界;

    d:数字字符;D:非数字字符;

    s:匹配一个空白字符;S:非空白字符;

    :换行符; :回车符;

    :制表符;v:垂直制表符;

    w:可以组成单词的字符;W:不可以组成单词的字符

    w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[w]匹配"$5.98"中的5,等于[a-zA-Z0-9]
    W 匹配一个不可以组成单词的字符,如[W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]

    详见:http://www.jb51.net/article/43190.htm

    http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp

  • 相关阅读:
    (1)MySQL初识
    ESP8266(WIFI模组)_Lua开发:环境搭建
    那些年写过的毕设论文
    单片机的心跳SysTick
    尝试
    菜单管理设计说明
    mybatis的mapper.xml中sql的用法
    powerdesigner
    Cookie
    java自定义注解
  • 原文地址:https://www.cnblogs.com/Decmber/p/5389868.html
Copyright © 2011-2022 走看看