zoukankan      html  css  js  c++  java
  • JS应用之正则表达式

    定义

    正则表达式是用于匹配字符串中字符组合的模式。

    创建正则表达式

    两种方式:

    1.new RegExp()

    
    let pattern1 = new RegExp('cat'); //第一个参数字符串
    let pattern2 = new RegEXP('cat', 'ig'); //第二个参数可选模式修饰符
    
    • i:忽略大小写
    • g:全局匹配,即模式被应用于所有字符串,而非匹配到第一项时立即停止
    • m:多行匹配
    • y:执行“粘性”搜索,匹配从目标字符串的当前位置开始,可以使用y标志

    2.字面量(以下栗子均使用字面量的方式创建正则表达式)

    
    let pattern3 = /cat/;
    let pattern4 = /cat/ig;
    

    匹配正则表达式

    1.test
    在字符串中测试是否匹配的RegExp方法,它返回true或false。

    
    let str = 'This is a cat!';
    console.log(pattern4.test(str)); //true
    

    2.exec
    在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。

    
    console.log(pattern4.exec(str)); //[cat]
    

    3.match
    在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。

    
    console.log(str.match(pattern4)); //[cat]
    

    4.replace
    在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。

    
    console.log(str.replace(pattern4, 'dog')); //This is a dog!
    

    5.search
    在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。

    
    console.log(str.search(pattern4)); //10
    

    6.split
    使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法。

    
    console.log(str.split(pattern4)); //["This is a ", "!"]
    

    正则表达式语法

    重复匹配(?、*、+、.、{m,n})

    • .匹配除换行符外的任意字符,单个匹配
    • x?匹配0个或1个x
    • x*匹配0个或任意多个x
    • x+匹配至少1个x
    • x{m,n}匹配最少m,最多n个的x,闭区间
    • (xyz){m,n}把xyz看成一个整体,匹配xyz最少m次最多n次
    • chrome|firefox|ie匹配chrome或者firefox或者ie中的任意一个
    
    let str = 'google',
        str1 = 'gooooogle',
        str2 = 'ggle',
        pattern = /g..gle/,
        pattern1 = /go*gle/,
        pattern2 = /go+gle/,
        pattern3 = /g.*gle/,//0个或多个的任意字符
        pattern4 = /go?gle/,
        pattern5 = /go{2,4}gle/,
        pattern6 = /go{3}gle/,//匹配3个o->gooogle
        pattern7 = /go{3,}gle/;//匹配3个或3个以上o
        
    console.log(pattern.test(str));//true
    console.log(pattern1.test(str));//true
    console.log(pattern1.test(str1));//true
    console.log(pattern2.test(str1));//true
    console.log(pattern2.test(str2));//false
    console.log(pattern3.test(str));//true
    console.log(pattern3.test(str2));//true
    console.log(pattern4.test(str));//false
    console.log(pattern7.test(str1));//true
    

    字符类匹配

    • [a-z]*表示任意个a-z中的字符
    • [A-Z]*表示任意个A-Z中的字符
    • [0-9]*表示任意个0-9中的字符
    • [a-zA-Z0-9]表示匹配一个以上三种情况下的任意一个字符
    • [^0-9]表示非0-9的任意字符
    • ^[0-9]表示以0-9为起始字符,^表示从起始位置开始匹配
    • [0-9]$表示以0-9为结束字符,$表示匹配结束位置
    • /d匹配数字,同[0-9]
    • /D匹配非数字,同[ ^0-9]
    • /w匹配字母数字及下划线_,同[a-zA-Z0-9_]
    • /W匹配非字母数字及下划线_,同[^a-zA-Z0-9_]
    • 匹配单词边界
    • B匹配非单词边界

    空白字符

    • 匹配null字符
    • f匹配换页字符
    • 匹配换行符
    • 匹配回车字符
    • 匹配制表符
    • s匹配空白字符、空格、制表符和换行符
    • S匹配非空白字符

    贪婪模式和非贪婪模式
    ?紧跟在任何量词 *、 +、? 或 {} 的后面,将会使量词变为非贪婪的(匹配尽量少的字符),和缺省使用的贪婪模式(匹配尽可能多的字符)正好相反。

    
    console.log('123abc'.match(/d+/)); //[123]
    console.log('123abc'.match(/d+?/)); //[1]
    

    捕获和非捕获
    (x)匹配 'x' 并且记住匹配项。括号被称为 捕获括号。

    
    console.log(/(d+)([a-z]+)/.exec('123abc')); //[12abc, 123, abc]
    console.log(/(d+)(?:[a-z]+)/.exec('123abc')); //[123abc, 123]
    

    正向肯定查找和正向否定查找
    x(?=y)匹配'x'仅仅当'x'后面跟着'y'.这种叫做正向肯定查找。
    x(?!y)匹配'x'仅仅当'x'后面不跟着'y',这个叫做正向否定查找。

    
    console.log(/goo(?=gle)/.exec('google')); //[goo]
    console.log(/goo(?=gle)/.exec('goodu')); //null
    
    console.log(/goo(?!gle)/.exec('google')); //null
    console.log(/goo(?!gle)/.exec('goodu')); //[goo]
    

    常用的正则表达式

    1.手机号(1xxxxxxxxxx):/^1[0-9]{10}$/
    2.邮政编码校验:/[1-9][0-9]{5}/
    3.匹配汉字:[u4e00-u9fa5]
    4.简易邮箱校验:/^([a-zA-Z0-9_.-]+)@([a-zA-Z0-9_.-]+).([a-zA-Z]{2,4})$/

    原文地址:https://segmentfault.com/a/1190000016879195

  • 相关阅读:
    Linux:备份
    在 Cordova/Phonegap for Android 中包含中文文件名的页面
    jQuery插件开发
    为Google Reader守夜。。。
    冒泡排序
    无题六月
    XXX读后感
    KL25的AD采集操作
    工作流--JBPM简介及开发环境搭建
    内存错误:CRT detected that the application wrote to memory after end of heap buffer
  • 原文地址:https://www.cnblogs.com/lalalagq/p/9903721.html
Copyright © 2011-2022 走看看