javascript正则表达式整理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lanix516/article/details/79723469

正则表达式有两种创建方式, 第一种生成一个RegExp对象,第二种生成一个string对象

var regObj = new RegExp("pattern",[,"flags"]);
var regObj = /pattern/[flags];                //该方式不能用引号将pattern和flags括起来

//pattern:必选项,正则表达式的字符串;
//flags:可选项,一些标志组合。

  • pattern 字符串规则

    特殊含义字符  ^*$+?|.\
    ^ :从字符串的开始匹配; 例如:/^a/  匹配"anA",而不匹配"Ana" 
    $ :匹配到字符串的结束;例如:/a$/  匹配"Ana",而不匹配"anA" 
    * :匹配*之前的字符0次或多次; 例如: 
    /ba*/ 匹配b,ba,baa,baaa
    + : 匹配+之前的字符1次或多次; 例如: /ba+/ 匹配ba,baa,baaa 
    ? : 匹配?前面的字符0次或1次; 例如: /ba?/  匹配 b,ba
    . :  匹配换行符外的任意字符。
    \ :  ^*?+ 都已经有了特殊的含义,如果想匹配这些字符,就要使用到\, 比如: /\*/  就可以匹配*字符
    | : 表示或, 比如/\*|\?/ 就可以匹配包含?或者*的字符串

    三个括号   ()[]{}
    () : 用于将匹配出来的字符分组, 例如有字符串 s1 = "123*456", s1.match(/(\d+)\*(\d+)/)将获得一个数组,包含[s1, '123', '456']
    [] : 一个字符集,匹配当中的任一个字符, 例如: /[0-9]/, 匹配一个数字, /[a-z]/ 匹配一个字符,[a-zA-Z0-9] 匹配一个大小写字符或一个数字
    {} : 标识字符出现的次数, 有三种形式:
        {n}, 前面的字符重复n次 , 例如/ab{2}/  代表a后有2个b
        {n, }, 前面的字符重复n次或多次 , 例如/ab{2, }/   代表a后有2个或多个b
        {n, m}, 前面的字符重复n到m次 , 例如/ab{2,5}/  代表a后有2-5个b
        所以这里   {0,}== *       {1,}== +               {0,1} ==?

    特殊含义的英文字符\DdWwSsnr
    \n  匹配一个换行符   
    \r  匹配一个回车符   
    \d  匹配一个字数字符,/\d/ = /[0-9]/   
    \D  匹配一个非字数字符,/\D/ = /[^0-9]/   
    \s  匹配一个空白字符,包括\n,\r,\f,\t,\v等   
    \S  匹配一个非空白字符,等于/[^\n\f\r\t\v]/   
    \w 匹配一个字符或者数字 等于 [a-zA-Z0-9]
    \W 匹配字符数字以外的字符 , 等于[^a-zA-Z0-9] 


  • flags标志位的含义
        g: 全局匹配  
        i: 忽略大小写  


好了,根据以上规则,我们生成一个正则表达式,怎么使用呢?当然是用在字符串的查找,替换,分割操作中。现在有字符串
var s1 = "abcd-1234*uioy?helloHELLOABCDEFG^[email protected]"
  1. s1.match(subString), 在字符串s1中查找subString, subString可以是一个普通字符串,也可以是一个正则,比如现在让着你查找s1中有没有hello,只需要   
    s1.match("hello")
    如果现在需要查找s1当中的某个数字字符串,比如电话号码,subString就可以传入一个正则表达式
    s1.match(/\d{4}-\d+/)

        这样就可以匹配出其中的电话(按区号4位匹配)

        如果要匹配s1中的数字,可以使用s1.match(/\d+/),可以匹配出1234, 如果想匹配s1中所有的数字子串,只需要使用    flag,s1.match(/\d+/g)

    2.  s1.replace(reg, target), 根据正则表达式来把匹配到子串,替换成目标串,例如

        s1.replace(/\d/g, '0')     //把所有的数字变成0 s1.replace(/\D/g, '') //去除s1中所有的非数字

        如果想对匹配出来的字符串进行修改怎么办,比如在hello后面加world,就要用到$1$2...., $1代表匹配出来的第一个()分组中的数据,那么只要执行s1.replace(/(hello)/g, "$1world"),就可以在原hello,后面添加world,如果使用s1.replace(/(hello)/ig, "$1world"), 可以发现大写的HELLO后面也被添加上了world,如果我想在大写的HELLO后添加大写的WORLD,执行s1.replace(/(hello)(HELLO)/, "$1world$2WORLD"), 两个分组分别对应$1,$2

    3. s1.search(reg), 在s1中查找reg匹配的字符串,并返回起始位置, 如果没有返回-1

    s1.search(/\d{4}-\d+/)     查找s1中有没有0000-000000这种格式的电话号码

扫描二维码关注公众号,回复: 5675373 查看本文章

除了字符串对象的几个方法中可以使用正则外,正则对象本身也有几个方法可以用来检测,处理字符串, 假设有regExp对象

        var r1= new RegExp("\d+");        
        var r2 = /^1[3578]/[0-9]{9}   
两个       

1. r2.test(str) , 方法用于检测一个字符串是否匹配某个模式, 根据r2的规则来判断str是否满足条件,多用来检测用户的输入是否合法,返回true/false.比如执行

r2.test("18653828881") -> true

r2.test("123456789")   -> false

在判断用户输入比如身份证号,电话,邮箱,整数,小数,两位小数,url等等的时候,可以先百度查找相关的正则表达式,然后test用户的输入的值。

2.r2.exec(str) , 返回一个符合r2匹配规则的数组 ,类似于str.match()


其他

贪婪模式和非贪婪模式


猜你喜欢

转载自blog.csdn.net/lanix516/article/details/79723469