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

    一、JS正则表达式简介

          1、正则表达式: Regular Expression 使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。

          2、正则表达式在线工具: regexper.com

               本地安装

          3、例子用符:  is      ----------- 单词 is ,是 word boundary,单词边界

                              . --------- 任意字符;      . -------- .  ;     / --------- / ; ( **** ) ---------- 分组;

                              d --------- 数字 ;    d{4} ----------- 4个数字 ;  [/-] -------- []是或者, / 或者-;

                              ^-----------开头 ;  $ ---------- 结尾;

                             $1 ---------    ;       $2-----------  ;     $3------------ 

    二、认识正则表达式

         1、RegExp对象

             JS通过内置对象RegExp支持正则表达式;

             两种方法实例化RegExp对象: 字面量 和  构造函数

                    字面量: var reg = / is/g;

                    构造函数:var reg = new RegExp('\bis\b','g');

             例子用符: / *** /g ----------- g是全局搜索,不加就匹配第一个

                                       i ----------- ignore case ,忽略大小写,默认大小写敏感

                                       m --------- multiple lines 多行搜索

          2、元字符

              正则表达式由两种基本字符类型字符:

                       原以文本字符

                       元字符 ---------------- 在正则表示式中有特殊含义的非文本字符

                                . * + ? $ ^ |  () {} []

                        ------ 水平制表符       --------- 换行   ---------- 回车

          3、字符类

               一般情况下正则表达式一个字符对应字符串一个字符。

              我们可以使用元字符 [] 来构建一个简单的类;所谓类是指符合某些特性的对象,一个泛指,而不是特指某个字符;如 表达式 [abc] 把字符 a 或 b 或 c归为一类,表达式可以匹配这类的字符。

               字符类取反 : 使用元字符^创建 反响类/负向类。 [^abc]

          4、范围类

               正则表达式还提供了范围类;所以我们可以使用 [a-z]来连接两个字符表示 从a到z的任意字符,这是闭区间,包含a和z本身。

                在 [] 组成的类内部是可以连写的 [a-zA-Z0-9];

                 - 的匹配正常用:[0-9-] -------- 匹配0~9或-;

           5、JS预定义类及边界

               预定义类:  . ----------------- 除回车和换行之外的所有字符

                                d  ------- [0-9] ----------- 数字字符

                               D ---------- [^0-9] ----------- 非数字字符

                               s --------- [ f] ----------- 空白符

                              S ----------- [^ f] ---------- 非空白符

                              w ----------[a-zA-Z_0-9] ---------- 单词字符(数字、字母或下划线)

                               W -------- [^a-zA-Z_0-9] ---------- 非单词字符

               边界匹配字符:

                       ^ ------------- 以 xxx 开始

                       $ ------------ 以 xxx 结束

                        ----------- 单词边界

                       B -----------  非单词边界,如 'This is a boy'.replace(/Bis/g,0);

           6、量词

                      ? -------- 出现0次或一次( 最多1次)

                      + --------  出现1次或多次 (最少1次)

                      * --------- 出现任意次

                      {n} --------  出现n次

                      {n,m} --------- 出现 n到m次

                       {n,} -------- 至少出现n次

                       {0,n} --------  最多n次

           7、贪婪模式与非贪婪模式

                贪婪模式:  d{n,m} --------------- 尽可能多的匹配,m次

                非贪婪模式:  d{n,m} ------------- 能匹配到n次就可以了,在量词后面加?

                                 如: ‘123456789’.match(/d{3,5}?/g)

           8、分组

                     Bayron{3} = Bayro + 'n{3}'  -------------- 是匹配的最后一个字母,不是单词,匹配单词需要分组

                     使用()进行分组 : (Bayron){3}   

                      或 :使用 | 达到或的效果 ---------         abc(d|e)123 : 匹配 abcd123 或abce123

                      反响引用:$1$2$3 ---------- 捕获分组,对单个无效

                                    如 2015-12-26  改为 12/26/2015 : ‘2015-12-26’.replace(/(d{4})-(d{2})-(d{2})/g,'$2/$3/$1');  

                      忽略分组: 不希望捕获某些分组,只需要在分组内加上?:就可以了:

                                       (?:Bayron).(ok)

              9、前瞻

                  正则表达式从文本头部向尾部开始解析,文本尾部方向,称为“前”。

                  前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言[即是否符合附加条件];

                                 后顾/后瞻方向相反,Javascript不支持后顾

                 符合和不符合特定断言称为 肯定/正向 匹配 和 否定/负向 匹配

                 正向前瞻 -------- exp(?=assert)

                 负向前瞻 -------- exp(?!assert)

                 例子: ‘a2*3’.replace(/w(?=d)/g,'X'); ----- 'X2*3'  意思是匹配的字符后面要是数字就替换

              10、JS对象属性

                   global: 全文搜索,默认false

                   ignore case: 是否忽略大小写敏感,默认false

                   multiline: 多行搜索,默认false

                   lastIndex: 是当前表达式匹配内容的最后一个字符的下一个位置

                   source:正则表达式的文本字符串

               11、test和exec方法

                     RegExp.prototype.test(str): 用于测试字符串参数中是否存在匹配正则表达式模式的字符串,返回 true 或 false。

                    注: test()的结果受lastIndex的影响,为false的重置。

                    RegExp.prototype.exec(str):使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果。返回 null 或 数组。数组属性:

                   ------- index 声明匹配文本的第一个字符的位置

                   ------  input 存放被检索的字符串 string

              12、字符串对象方法

                   String.prototype.search(reg)

                  search():用于检测字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。

                   方法返回第一个匹配结果index,查找不到返回-1。

                   search()方法不执行全局匹配,它将忽略标志 g ,并且总是从字符串的开始进行搜索。

            

                  String.prototype.match(reg)

                  match()方法将检索字符串,以找到一个或多个与regexp匹配的文本;返回 null 或 数组。

                  regexp是否具有标志 g 对结果影响很大,没有就执行一次。

                 数组属性还是  index 和 input[存放正则表达式]

                 String.prototype.split(reg)

                 常用split()把字符串分割成字符数组,如: ‘a1f2g4g6’.split(/d/g) ---- ['a','f','g','g']  以数字分割。

                 String.prototype.replace(str,replaceStr)  ----------  第一个str可是 /正则表达式/g

                 String.prototype.replace(str,function)   ,function参数的含义:

                      function会在每次匹配替换的时候调用,有四个参数:

                        1、匹配字符串

                        2、正则表达式分组内容,没有分组则没有该参数

                        3、匹配项在字符串中的index

                        4、原字符串

               例子: 字符串中数字+1

                   ‘a1g2f3h4’.replace(/d/g,function(match,index,origin){

                         return parseInt(match)+1;

                  });

               

              

  • 相关阅读:
    SGU 499 Greatest Greatest Common Divisor
    pku 3468 A Simple Problem with Integers
    pku2226 Muddy Fields
    pku3041 Asteroids
    java基础string操作
    PowerDesigner(7)转载
    java基础2
    PowerDesigner(6)转载
    java基础3
    java基础(1)
  • 原文地址:https://www.cnblogs.com/cuihuale/p/6436718.html
Copyright © 2011-2022 走看看