javascript中的正则

1.正则只能用来处理字符串,.处理一般包含两个方面

    ①:验证当前字符串是否符合某个规则(正则匹配)
    ②:获取到一个字符串中符合某种规则的字符(正则捕获)

2.创建正则的两种方式

    let reg1=/^\d+$/g
    let reg2=new RegExp("^\\d+","g")

3.正则组成

常用的修饰符:
    i:忽略大小写
    m:多行匹配
    g:全局匹配
 常用的元字符:
    特殊元字符:
        \d:0-9之间的一个数字字符
        \D:非0-9之间的一个字符
        \w:数字字母下划线中的任意一个
        \W:非数字字母下划线
        \s:任意一个空白字符
        \S:任意一个非空白字符
        \b:字母边界符
        \n:匹配一个换行符
        \:转义符,(把一个普通字符转义为一个特殊含义的字符,也可以用来把有特殊含义的字符转为普通字符)
        .:除了\n以外的任意字符
        ^:以其开头
        $:以其结尾
        |:或 =》x|y =》x或者y中的一个
        []:选中 =》 [abd] =>a,b,d中的任意一个字符
        [^]:非选中 =》[^abd] =>非a,b,d中的一个
        [a-z]:小a到小z中的一个字符
        [^a-z]:非小a到小z中的一个字符
        ():正则分组
        (?:):当前分组只匹配不捕获
        (?=):正向预查
            /2019(?=-1)/ => 正向预查,匹配出2019后还会看2019后面是不是跟着的-1,是才符合
            "2019-1-5" => true
            "20195858" => false
            "2019-2-5" => false
        (?!):负向预查
            /2019(?!-1)/ => 负向预查,匹配出2019后还会看2019后面是不是跟着的-1,不是才符合
            "2019-1-5" => false
            "20195858" => true
            "2019-2-5" => true
    量词元字符:(让其左边的元字符出现多少次)
        *:出现0次或者多次
        +:出现1次或者多次
        ?:出现0次或者1次
        {n}:出现n次
        {n,}:出现n次或者多次
        {n,m}:出现最少n次最多m次

4.[]的一些细节:

        []中出现的一般元字符都只代表其本身 => /^[.]$/ =>匹配的仅仅是.这个字符,而不是元字符.代表的意义
        []中出现的两位数并不是两位数,而是代表两个数字中的任意一个 => /^[18]$/ =>只能匹配1或者8,匹配不了18
        [12-65] => 这不是匹配12-65之间的一个字符,而是匹配1,2到6,5中的一个,[]中不存在两位数

5.()分组的作用

        1.改变默认优先级
            /^18|19$/ => 这不是匹配18或者19而是以18开头或者以19结尾,/^(18|19)$/ =>这才是匹配18或者19
        2.分组捕获
            exec():正则中的捕获方法
            1.如果可以匹配返回一个数组,不可以匹配返回null
            2.如果匹配的时候想获取大正则中的部分信息,可以将这一部分使用()包起来,形成一个分组,
              这样在捕获 的时候不仅会捕获到大正(整个正则所匹配的),而且还会捕获到(分组捕获)
            3.有时候写()并不是为了捕获,只是为了改变优先级或者分组引用,此时我们可以在分组的前面加上"?:",代表
              这个分组中的内容只匹配不捕获
                let reg=/^(\d{6})(\d{4})(\d{2})(\d{2)\d{2}(\d)(?:\d|X)$/;用来匹配身份证
                reg.exec('411522199608242412');
                =>["411522199608242412", "411522", "1996", "08", "24", "1" ]
         3.分组引用
            /^([a-z])([0-9])\2\1$/:这里的括号代表分组,([a-z])就是第一个分组,([0-9])就是第二个分组,\2
            意思是和第二个分组一样,\1意为与第一个分组一样,就相当于/^([a-z])([0-9])[0-9])([a-z])$/

6.正则特性

①正则捕获的懒惰性:(加g全局就可去除懒惰性)
	使用正则捕获的时候,如果后面不加全局g,那么每一次捕获的时候其起始位置就都是捕获字符串的索引0开始跟字符串的replace替换
	方法的第一个参数一样,每一次执行都会从头开始检查,但是如果在后面加一个g全局  那么每一次匹配完正则对象都会记录下来,然后
	下一次匹配的时候就会从上次记录位置开始进行捕获,所以如果开了全局g两次捕获不同的字符串,第二次捕获会在第一次捕获记录位置
	开始,不过这权限于同一个正则对象来 捕获,记录位置的属性是lastIndex,是正则对象的一个可读写的属性,不加g这个属性的值就没
	有影响,始 终是从0开头位置开始匹配捕获,而且不单单是捕获,就是是正则匹配也是有这种懒惰性的,所以加全局g不管时对正则匹配
	还是正则捕获都会有影  响,因为全局g会影响正则的lastIndex属性值,而正则每一次进行匹配捕获都会从lastIndex索引值位置处开 
	始捕获匹配
②.正则捕获的贪婪性:
    正则进行捕获的时候,会捕获可能捕获的最大程度来捕获
    /(\d{2,3})/ => 如果可以捕获三项就一定不会捕获两项,这就是贪婪性,能捕获更多就绝对不会少捕获
     取消贪婪性:在量词后面加上?,=> /(\d+?)/,/(\d{2.3}?)/,这里的?不是量词?,而是贪婪取消符?

7.string的replace替换方法:

实现字符的替换(将字符串中的第一个a字符替换成b字符),注意一次只能替换一个,所以它一般都配合着正则来使用,因为使用	
正则会一次替换所有的要替换的字符
replace方法的第二个参数还可以是一个回调函数,如果第二个参数是一个回调函数,那么会默认传入三个实参,
第一个是匹配到的字符(如果正则中有分组捕获,那么则会将分组捕获捕获到的各项逐项当做参数传进函数中,
全部传进去后在传起始匹配位置和原字符串),第二个是匹配到的字符在字符串中的,第三个是原字符串,
每一次函数运行的return返回值会传入字符串匹配项中去替换掉匹配项,如果不返回则使用undefined进行匹配项替换,
如果第一个参数是正则表达式,第二个参数字符串中可以通过$分组索引来引用前面分组中匹配的内容,
$后面的分组索引如果是不存在的,像一共三个分组你整个$4,那这个$4就只能字符串$4(返回新字符串,原字符串不变)

8.string的match方法

匹配一个字符串中匹配正则的部分(原字符串不变,返回符合部分组成数组)
string.match(正则表达式)  =>  匹配string中符合正则表达式的部分,返回一个所有匹配部分组成的数组
如果正则不匹配则返回null,与正则的exec基本相同
match后面括号中也可以放字符,字符串中如果有这个字符就会返回一个数组,没有这个字符则会返回null,所有也可以用来查找字符串中是否有某字符

正则题录一套:

订单
1.匹配一个电话号码:11位数字,第一位必须是1,最后一位不能是奇数
=> /^[1][0-9]{9}[2468]$/
2.长度为8-10的用户密码(以字母开头、数字、下划线)
=> /^([\w]{8,10})$/
3.匹配18-65
=> /^(1[89])|([2-6]0)|(6[1-5])$/
4.邮箱正则:
=> /^\w+@(163|qq)\.(com|cn|com\.cn)$/
5.姓名正则:
=> /^[\u4e00-\u9fa5]{2,4}$/
6.匹配[Object 任意1-多位的字符]
=> /^\[Object .+\]$/
7.匹配有效数字:
/^[+-]?\d+(\.\d+)?$/
8.连续3个数字
=> /^\d\d\d$/
9.连续2个相同的 数字
=> /([\d])\1/
10.连续3个相同的数字
=> /([\d])\1\1/
11.连续3个或3个以上 相同的 字符
=> /^([\d])\1\1*$/
12.正整数
=> /^[1-9]\d*$/
13.负整数
=> /^-[1-9]\d*$/
14.整 数
=> /^[+-]?\d+$/
15.正浮点数
=> /^\d+\.\d+$/
16.负浮点数
=> /^-\d+\.\d+$/
17.浮点数
=> /^[+-]?\d+\.\d+$/
18.匹配一个字符串中的 正浮点数
=> /[^-]\d+\.\d+/
19.匹配以 `正浮点数` 开头或结尾 的字符串
=> /^[+]?[0-9]+\.[0-9]+|[+]?[0-9]+\.[0-9]+$/
20.只匹配 日期格式:年-月-日 =>/^[\d]{4}-([1-9]|1[012])-([1-9]|[12][\d]|3[01])$/
21.只匹配 日期格式:年-月-日 或 年.月.日 或 年/月/日 =>/^[\d]{4}(-|\.|\/)([1-9]|1[012])(-|\.|\/)([1-9]|[12][\d]|3[01])$/
22.只匹配 中国大陆身份证号,15位或18位
23."<a href='http://hi.baidu.com/mianshiti/blog/category/微软面试题'> 微软面试题 </a>",提取其中的链接地址
   =>replace(/.*'(.*)'.*/,function(){
  return arguments[1];
  })
24."get-element-by-id"写一个正则使其转为驼峰命名"getElementById"
 => replace(/[-]([a-z])([a-z]*)/g,function(){
     return arguments[1].toUpperCase()+arguments[2]
  })
25.给定字符串 str,检查其是否符合如下格式 1、XXX-XXX-XXXX 2、其中 X 为 Number 类型
 => /[\d]{2}-[\d]{3}-[\d]{4}/
26.给定字符串 str,检查其是否符合美元书写格式
 1、以 $ 开始
2、整数部分,从个位起,满 3 个数字用 , 分隔
3、如果为小数,则小数部分长度为 2
 4、正确的格式如:$1,023,032.03 或者 $2.03,错误的格式如:$3,432,12.12 或者 $34,344.3
 => /^\$[1-9]{1-3}(,[0-9]{3})*(\.\d{2})*$/
27.获取 url 中的参数
指定参数名称,返回该参数的值 或者 空字符串
不指定参数名称,返回全部的参数对象 或者 {}
如果存在多个同名参数,则返回数组
28.对大串数字进行千分制处理,三位数字用一个','(逗号)隔开
 =>replace(/(\d{1-3})(?=(\d{3})+$)/g,function(){
 	 return arguments[1]+",";
 }) 、
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值