引用类型----RegExp类型----正则表达式

1. 正则表达式创建方式:

        ① 字面量的形式创建

                 语法:var expression = / pattern / flags;

                 pattern(模式):是一个正则表达式。

                 flags(标志):可以是一个或多个

                                  g(代表全局global模式),该模式可以应用到所有的字符串。

                                  i(不区分大小写模式),在确定匹配项时忽略模式与字符串的大小写。

                                  m(多行multiline模式),在匹配到一行末尾时,会自动匹配下一行是否存在与模式匹配的项。

                 如:

                        匹配字符串中所有"at"的实例: var pattern1 = /at/g;

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

                        匹配所有以"at"结尾的 3 个字符的组合,不区分大小写:var pattern3 = /.at/gi;

                 注意:模式中使用的所有元字符( ( [ { \ ^ $ | ) ? * + . ] } )当用来匹配字符串中包含的这些字符,都必须进行转义。

                          如: 

                               匹配第一个" [bc]at",不区分大小写:/\[bc\]at/i;

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

             ② RegExp构造函数(接受两个参数,匹配字符串的模式---是一个字符串和可选的标志字符串---是一个字符串)

                         语法:var pattern1 = new RegExp("at", "g");

                         因为两个参数都是字符串,所以遇到元字符要进行双重转义。

                                     字面量                               RegExp构造函数

                                     /\[bc\]at/                             "\\[bc\\]at"
                                     /\.at/                                   "\\.at"
                                     /name\/age/                       "name\\/age"
                                     /\d.\d{1,2}/                          "\\d.\\d{1,2}"
                                     /\w\\hello\\123/                   "\\w\\\\hello\\\\123"

2. RegExp对象的属性:

           global:布尔值,用来判断是否设置了g标志。

           ignoreCase:布尔值,用来判断是否设置了i标志。

           multiline:布尔值,用来判断是否设置了m标志。

           lastIndex:整数,用来获取开始搜索下一个匹配项的字符位置。开始为0。

           source:返回按照字面量的形式的字符串模式。

           var pattern1 = /\[bc\]at/i;

           pattern1.global-----false

           pattern1.ignoreCase-----true

           pattern1.multiline-----false

           pattern1.lastIndex-----0

           pattern1.source-----"\[bc\]at"

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

           pattern2.source-----"\[bc\]at"   //虽然是以构造函数的形式创建正则表达式,但是还是以字面量的形式返回字符串模式

3. RegExp对象的方法:

          ① exec():可以得到捕获组,该函数接收一个参数即待 应用 模式的字符串。返回值:一个数组,该数组有两个额外的属性  index(匹配项在字符串中出现的位置,即模式pattern在字符串中出现的位置),input(即exec函数接收的参数,待应用模式的字符串),数组的第一项是待应用 模式 的字符串中与模式相匹配的字符串,其他项是待应用 模式 的字符串中与模式的捕获组相匹配的字符串(如果没有找到则是undefined,如果模式中没有包含捕获组则该数组只包含第一项)。

        如:

              例一:

                        var text = "mom and dad and baby";------带应用 模式 的字符串
                        var pattern = /mom( and dad( and baby)?)?/gi;  -----模式,匹配项
                        var matches = pattern.exec(text);-----数组
                        alert(matches.index); ----- 匹配项在字符串中出现的位置-----0
                        alert(matches.input); -----待应用 模式 的字符串----mom and dad and baby
                        alert(matches[0]);-----待应用 模式 的字符串中与模式相匹配的字符串----mom and dad and baby
                        alert(matches[1]);-----待应用 模式 的字符串中与模式的捕获组相匹配的字符串----外层捕获组----and dad and baby
                        alert(matches[2]); -----待应用 模式 的字符串中与模式的捕获组相匹配的字符串----内层捕获组----and baby

              例二:           

                        全局模式下:接着上一次的位置开始

                            var text = "cat,bat,sat,fat";-----待应用 模式 的字符串

                            var pattern1 = /.at/g;-----模式,匹配项

                            var matches = pattern1.exec(text);-----数组

                            console.log(matches);-----["cat", index: 0, input: "cat,bat,sat,fat", groups: undefined]

                            console.log(pattern1.lastIndex);-----搜索下一个匹配项字符的位置----3

                            console.log(matches.index);-----匹配项在字符串中出现的位置-----0
                            console.log(matches[0]);-----待应用 模式 的字符串中与模式相匹配的字符串----cat

                            matches = pattern1.exec(text);-----再一次运行该函数,因为是全局模式下,所以会接着上一次搜索

                            console.log(matches);------["bat", index: 4, input: "cat,bat,sat,fat", groups: undefined]

                            console.log(pattern1.lastIndex);-----搜索下一个匹配项字符的位置-----7

                        非全局模式下:从头再来

                            var text = "cat, bat, sat, fat";------待应用 模式 的字符串
                            var pattern1 = /.at/;-----模式,匹配项
                            var matches = pattern1.exec(text);-----数组
                            alert(matches.index);-----匹配项在字符串中出现的位置----0
                            alert(matches[0]);-----待应用 模式 的字符串中与模式相匹配的字符串----cat
                            alert(pattern1.lastIndex);-----搜索下一个匹配项字符的位置----0
                            matches = pattern1.exec(text);-----再次运行该函数
                            alert(matches.index);-----匹配项在字符串中出现的位置----0
                            alert(matches[0]);-----待应用 模式 的字符串中与模式相匹配的字符串----cat
                            alert(pattern1.lastIndex);-----搜索下一个匹配项字符的位置----0

         ② text()函数:接收一个字符串参数,在模式与字符串匹配的情况下返回true,否则返回false。在只想知道目标字符串与模式是否匹配,不需要知道具体的文本内容是可以用。

                         var text = "000-00-0000";
                         var pattern = /\d{3}-\d{2}-\d{4}/;
                         if (pattern.test(text)){
                                alert("The pattern was matched.");
                         }

         RegExp 实例继承的 toLocaleString()和 toString()方法都会返回正则表达式的字面量,与创建正则表达式的方式无关。

                      var pattern = new RegExp("\\[bc\\]at", "gi");
                      alert(pattern.toString());    // /\[bc\]at/gi
                      alert(pattern.toLocaleString());    // /\[bc\]at/gi

4. RegExp()构造函数属性

             长属性名                     短属性名(使用时部分要用方括号语法访问)          意义

              input                                                     $_                                                    待应用 模式 的字符串

              lastMatch                                              $&  ["$&"]                                       最近一次待应用 模式 的字符串中被匹配的项

              lastParen                                              $+   ["$+"]                                        最近一次匹配的捕获组

              leftContext                                            $`    ["$`"]                                         待应用 模式 的字符串中被匹配项之前的文本

              rightContext                                          $'    ["$'"]                                          待应用 模式 的字符串中被匹配项之后的文本

              multiline                                                $*   ["$*"]                                         布尔值,表示是否所有的表达式中都使用多行模式

              例一:

                         var text = "this has been a short summer"; ----待应用 模式 的字符串

                         var pattern = /(.)hort/g;  -----模式,匹配项

                         if(pattern.test(text)){ ----如果可以匹配

                                  alert(RegExp.input);  ----待应用 模式 的字符串-----this has been a short summer

                                  alert(RegExp.leftContext); ----待应用 模式 的字符串中被匹配项之前的文本----this has been a

                                  alert(RegExp.rightContext); ----待应用 模式 的字符串中被匹配项之后的文本----summer

                                  alert(RegExp.lastMatch); ----最近一次待应用 模式 的字符串中被匹配的项----short

                                  alert(RegExp.lastparen); ----最近一次匹配的捕获组----s

                                  alert(RegExp.multiline);----表示是否所有的表达式中都使用多行模式----false

                          }

猜你喜欢

转载自blog.csdn.net/wurourouzhang/article/details/84939734