JS正则表达式

正则表达式(Regular Expression,在代码中常简写为 regex、regexp 或 RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。搜索模式可用于文本搜索和文本替换。

语法

/正则表达式主体/修饰符(可选)
var re = /a/;  // 在两个斜线之间的字符串是不需要添加引号的
var re = new RegExp('a');  //有一种特殊情况下,要用new方式(正则传参的时候)

先介绍几个有关的概念:

转义字符:

通过 \ 来实现
\d:数字 0-9
\D:非数字
\s:空格
\S:非空格
\w: 字符( 字母a-z 数字0-9 下划线_ )
\W: 非字符
\b: 端点 ( 起始、结束、空格 )
\B: 非端点

修饰符:

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

量词:

{n, m} 匹配前一项至少n次,但是不能超过m次。
{n, } 匹配前一项n次,或者多次。
{n} 匹配前一项恰好n次。
+ 匹配前一项1次或多次 {1,}
* 匹配前一项0次或多次 {0,}
? 匹配前一项0次或1次 {0,1}

可以操作正则的方法:

字符串:match、search、replace、split
正则:test、exec
1.test()

判断真假值,如果字符串中含有满足正则规则的文本,那么返回 true,如果不满足正则的规则 false。
写法:正则.test(字符串)

    var str = '72T9834';
    var re = /T9/;
    console.log(re.test(str));  //true
2.exec()

正则去字符串中匹配,把匹配到的结果返回一个数组,如果匹配不到结果就返回 null。
写法: 正则.exec(字符串)
和 match 的区别 :exec()不支持 g 修饰符

    var str = 'hello world';
    var re = /o/g;
    console.log(re.exec(str)); //["o"] index: 4
3.match()

正则去字符串中匹配,把匹配到的结果返回一个数组,如果匹配不到结果就返回 null。
写法: 字符串.match(正则)

    var str = 'hello world';
    var re = /ell/;
    console.log( str.match(re) );   // ['ell']

正则默认是第一次匹配成功整个匹配就结束了,如何做到继续向字符串的后面进行匹配呢?可以通过修饰 g 来实现,g 修饰符代表全局匹配。(从字符串的头匹配到字符串的尾)

    var str = 'hd123ccv56fh4567df789';
    var re = /\d+/g;
    console.log(str.match(re));  //["123", "56", "4567", "789"]
4.split()

使用正则表达式或者一个固定字符串分隔一个字符串。
写法: 字符串.split(正则)

    var str = '1sdf2df3ccc';
    var re = /\d/;
    console.log(str.split(re));  //["", "sdf", "df", "ccc"]
5.search()

正则去匹配字符串,如果匹配到了,返回匹配的位置,如果没匹配到就返回 -1。
写法: 字符串.search(正则)
正则默认是区分大小写的 , 如何让正则不去区分大小写呢?可以用 i 修饰符来实现。

    var str = 'hello world';
    var re = /W/i;
    console.log(str.search(re));   //6
6.replace()

正则去匹配字符串,把匹配到的结果替换成指定的新字符。
写法: 字符串.replace(正则 , 新的字符)

    var str = 'abacad';
    var re = /a/g;
    str = str.replace(re, '*');
    console.log(str);  //  *b*c*d

字符范围: | (或的意思)

    var str = 'abacadb';
    var re = /a|b/g;
    str = str.replace(re, '*');
    console.log(str);  //  ***c*d*

第二个参数,可以是字符串,也可以是一个回调函数。回调函数的第一个参数:就是当前匹配到的结果,以此类推。

匹配子项: 正则中通过()可以实现子项的操作。

    var str = 'hello world';
    var re = /(el)(lo)/;

    str.replace(re, function ($0, $1, $2) {
        console.log($0, $1, $2);
        return '*';
    }); //  ello el lo

匹配重复的子项:\1 \2 \3 …

    var str = 'aa11ccqw';
    var re = /([a-z0-9])\1/g;
    console.log(str.match(re));  //["aa", "11", "cc"]

字符范围: [ ] 选择指定的一个范围,并且都是或的关系。

    var str = 'abc';
    var re = /a[bde]c/;
    var re1 = /a(b|d|e)c/;
    console.log(re.test(str));  // re和re1都是true

写在[ ]里的 ^ ,代表排除。注:写到中括号的第一个位置。

    var str = 'awc';
    var re = /a[^bde]c/;
    console.log(re.test(str));  //true

常用正则表达式实例:

匹配中文:/^[\u4e00-\u9fa5]$/  uniCode编码的16进制
匹配邮箱:/^[a-z0-9_-]+@[a-z0-9]+(\.[a-z]+){1,3}$/
          /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
          /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/
验证用户名:/^[a-zA-Z][a-zA-Z0-9_]{4,15}$/   字母开头,允许5-16字节,允许字母数字下划线
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值