• javascript核心基础(正则专题)


    正则表达式

      我们在文本模式匹配,格式验证的时候经常使用正则表达式,学习过编译原理的朋友,一定对这些模式匹配不陌生(楼主编译原理不及格),由于本篇博客是一个基础性讲解,所以不会有很多复杂的模式匹配的例子,主要是JS自身的基础语法和用法,以及常用的小技巧,楼主水平有限,遇到什么有用的技巧,会再次补充,也欢迎各位网友的指教,正则表达式的学习没有必要一开始往精细里使劲。

      主要内容:正则表达式的定义,基础语法,String的正则方法,RegExp的正则方法

    1.正则表达式的定义

      js的正则表达式使用RegExp对象来表示的,可以使用new RegExp()构造方法来建立,也可以像数组和类那样使用直接量语法来创建:

    var pattern = /\d+s$/;//一个或多个数字以s字母结尾
    //相当于下面的定义
    var pattern = new RegExp("\\d+s$");
    //第一种方式必须以//作为标志,就像数组以[],类以{}作为标志一样
    //用第二种方法时就不用写//了,但是\必须要转义才可以

    2.基础语法(以下表格一部分来自W3School,摘取了一些重要的部分)

      在正则表达式里,许多标点符号具有特殊的含义:^ $ . * + ? = ! : | \ / { } [ ] ( )   使用这些字符直接匹配的时候都要转义字符\

    2.1修饰符(跟在正则式的后面例如/abc/i)

    i 执行对大小写不敏感的匹配。
    g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
    m 执行多行匹配。

    2.2方括号[]方括号用于查找某个范围内的字符:

    表达式描述
    [abc] 查找方括号之间的任何字符。
    [^abc] 查找任何不在方括号之间的字符。
    [0-9a-zA-Z] 查找任何从 0 至 9 的数字小写 a 到小写 z 的字符大写 A 到大写 Z 的字符

     2.3元字符(Metacharacter)是拥有特殊含义的字符:

    元字符描述
    . 查找单个字符,除了换行和行结束符。
    \w 查找单词字符。
    \W 查找非单词字符。
    \d 查找数字。
    \D 查找非数字字符。
    \s 查找空白字符。
    \S 查找非空白字符。
    \b 匹配单词边界。
    \B 匹配非单词边界。
    \0 查找 NUL 字符。
    \n 查找换行符。
    \f 查找换页符。
    \r 查找回车符。
    \t 查找制表符。
    \v 查找垂直制表符。

     2.4量词(实现重复)

    量词描述
    n+ 匹配任何包含至少一个 n 的字符串。
    n* 匹配任何包含零个或多个 n 的字符串。
    n? 匹配任何包含零个或一个 n 的字符串。
    n{X} 匹配包含 X 个 n 的序列的字符串。{}跟在后面
    n{X,Y} 至少X次但不能超过Y次
    n{X,} 匹配包含至少 X 个 n 的序列的字符串。

    对于上面的量词都是贪婪匹配,要实现非贪婪匹配在匹配后面再加一个?即可如:+?  *? ?? {1,5}?

    2.5指定匹配位置

    ^ : 一行的开头

    $ : 一行的结尾

    \b : 匹配一个单词的边界

    \B : 匹配非单词的边界

    (?=p) : 接下来的字符串都要跟p匹配

    (?!p) :  接下来的字符串都要不跟P匹配

    2.6选择,分组,引用  ()

     |  选择,匹配左右侧的表达式都可以,从左向右进行

    (表达式)  组合,将几个项组合成一个单元,这个单元可以用+ * ? | 等来修饰,并且可以记住此组合匹配到的字符串以备以后引用,如第一个()引用时/1

     (?:表达式)  只组合不记忆

    /n 第n个()记忆的值

    3.用于模式匹配的String方法(4个)

     3.1 search() 参数是一个正则表达式,返回第一个与之相匹配的的字串的起始位置,没有匹配则返回-1 (注意在search的参数中g是不起作用的)

    'javascript'.search(/script/i);//返回4

    3.2 replace() 用于检索和替换,有两个参数,第一个是一个正则表达式,第二个参数是要进行替换的字符串

    var text = 'i love "javascript" , do not like "actionscript"';
    text.replace(/script/gi,'SCRIPT');//将替换掉所有的script为大写
    //如果没有g修饰的话,将只替换第一个匹配的
    text.replace(/script/i,'s');//只替换第一个SCRIPT
    //replace方法的功能远不止这些,如下面的小技巧
    var quote = /"([^"]*)"/;//匹配所有被""包围的字符串
    text.replace(quote,' ”$1“ ');//将会把应为的引号换位中文的引号,$1表示第一个()
    //关于其他replace特点以后在做描述

    3.3 match() 只有一个正则表达式的参数,返回一个由匹配结果组成的数组

    //当有g修饰的时候,返回所有结果的数组
    var array ='1 is not 2 is not 3'.match(/\d+/g);//['1','2','3']
    //当没有g修饰啥时候,返回的依然是一个数组,但只匹配第一个,余下的元素是正则表达式中用圆括号括起来的子表达式
    //匹配URL
    var urlP = /(\w+):\/\/([\w.]+)\/(\s*)/;
    var text ='my blog is http://www.cnblogs.com/wychytu'; 
    var result = text.match(urlP);
    if(result){
      var fulurl = result[0];//匹配到的第一个url,完整大url
      var u1 = result[1];//http
      var u2 = result[2];//www.cnblogs.com
      var u3 = result[3];//wychytu
    }

    3.4 split() 多用于把一个字符串拆分成数组,其参数也可以是正则表达式

    var text = '1 , 2 ,3 ,4';
    text.split(/\s*,\s*/);//['1','2','3','4']

    4.RegExp对象及其方法(2个)

     RegExp的属性有5个:source正则表达式的文本;global布尔型,是否带有修饰符g;ignoreCase布尔型,是否带有修饰符i;multiline布尔型,是否带有m修饰符;lastIndex下一次检索的位置,可读可写

    4.1 exec() 与match()方法相似,不同之处是,当同一个正则表达式调用第二次exec时,将从上次的lastIndex位置开始

    while((result = pattern.exec(text)) != null){
    alert(result[0]   + result.index  +pattern.lastIndex);
    }

    4.2 test()与exec()相同,exec返回值不是null是,text返回true

    注意:要遍历一个字符串,挨个进行,使用RegExt比较灵活,注意使用好lastIndex属性 

     

     

  • 相关阅读:
    微信支付 h5
    微信支付 h5
    Android stadio butternife工具
    Android stadio butternife工具
    Android stadio 自定义debug release keystore
    Android stadio 自定义debug release keystore
    Android 微信支付步骤
    Android 微信支付步骤
    t
    t
  • 原文地址:https://www.cnblogs.com/wychytu/p/3556706.html
Copyright © 2020-2023  润新知