正则表达式大赏

1.什么是正则表达式?

简单来说,它就是检验字符串的一种规则。

2.正则表达式的作用?

主要用于表单验证。

3.如何创建正则表达式?

方法语法
字面量/正则表达式/标志位
构造函数new RegExp(“正则表达式”,“标志位”)

区别 :字面量的效率更高一些。当正则需要交给用户来制定的时候,我们就可以选择第二种方式。把正则当做参数传进来。

4.标志位

方法释义
g全局匹配
i不区分大小写

5.正则表达式的方法

语法释义
正则表达式.test(字符串)检测字符串中是否包含正则表达式的内容,返回布尔值。
正则表达式.exec(字符串)返回一个数组,没有匹配,返回null

:字符串中有个match方法,语法为:字符串对象.match(正则表达式),它返回一个数组,没有匹配时,返回null。他们的区别是,exec不受g的影响,会受到组的影响。match会受到g的影响,有g时,不会返回子匹配。

6.元字符

口诀:三 三 二 三个一

  • 三 {} [] ()
方法释义
{}表示{}前面的一个或一组字符连续出现的次数。
{m}表示{}前面的一个或一组字符连续出现m次。
{m,}表示{}前面的一个或一组字符连续出现至少m次。
{m,n}表示{}前面的一个或一组字符连续出现至少m次,最多n次。
[]表示范围。
()表示组
  • 三 * + ?
方法释义
*表示 * 前面的一个或一组字符连续出现0至无限次,即{0,}
+表示+前面的一个或一组字符连续出现1至无限次,相当于{1,}
?表示?前面的一个或一组字符连续出现0至1次,相当于{0,1}
  • 二 ^ $
方法释义
^定头或取反,写在正则表达式的开头,限制开头字符。写在[]中开头部分,表示取反,如[^0-9],表示除数字以外的部分
$定尾,写在正则表达式的结尾,限制结尾字符

,定头定位情况下,未写明次数,表示必须出现一次。

  • 三个一 . | \
方法释义
.表示可以模糊匹配任意一个字符
|表示或者
\转义符
\d表示数字,相当于[0-9]
\D表示非数字,相当于[^0-9]
\s表示空白
\S表示非空白
\w表示数字字母下划线,相当于[a-zA-Z0-9_]
\W表示非数字字母下划线,相当于[^a-zA-Z0-9_]
\b表示单词边界

7.字符串方法

  • 字符串对象.match(正则表达式):返回一个数组,没有匹配,返回null
  • 字符串对象.replace(旧串,新串):替换
  • 字符串对象.search(正则):类似indexOf()

基础方法示例:

    const re = /do/;
    const str = 'how do you do';
    console.log(re.test(str)); // true

区分大小写

    const re = /do/;
    const str = 'how Do you Do';
    console.log(re.test(str)); // false

不区分大小写

    const re = /do/i;
    const str = 'how Do you Do';
    console.log(re.test(str)); // true

另外,上面均为使用字面量的方式创建。构造函数方式为:

    const re = new RegExp('do', 'i');
    const str = 'how Do you Do';
    console.log(re.test(str)); // true
    {m}
    const re = /do{3}/i; // {}前面的o字母连续出现三次
    const str = 'how Do you Do';
    console.log(re.test(str)); // false
    const re = /do{3}/i; // {}前面的o字母出现三次
    const str = 'how Dooo you Do';
    console.log(re.test(str)); // true
    {m}: 只要包含以d开头并且o连续出现三次,就为true,出现三次以上也是true
    const re = /do{3}/i; // {}前面的o字母出现三次 
    const str = 'how tooo you Do';
    console.log(re.test(str)); // false  须以d开头
    定头定尾
    const re = /^do{3}$/i;  // 以d开头,以o结尾,且o出现三次
    const str = 'how doooo you Do'; // str以h开头
    console.log(re.test(str)); // false
    定头定尾
    const re = /^do{3}$/i;
    const str = 'dooo';
    console.log(re.test(str)); // true
    {m,}:o出现至少三次
    const re = /^do{3,}$/i;
    const str = 'dooooooooooooo';
    console.log(re.test(str)); // true
    {m,n}:o出现至少三次
    const re = /^do{3,5}$/i;
    const str = 'dooooo';
    console.log(re.test(str)); // true
    []:范围
    const re = /^[abc]{3,5}$/i; // 只要字符串在[]的范围内,并且是3-5位
    const str = 'aaaa';
    console.log(re.test(str)); // true
    []:范围
    const re = /^[abc]{3,5}$/i; // 只要字符串在[]的范围内,并且是3-5位
    const str = 'aaaad';
    console.log(re.test(str)); // false
    []:范围
    const re = /^[a-z]{3,5}$/i; // 只要字符串在[]的范围内,并且是3-5位
    const str = 'Zoo';
    console.log(re.test(str)); // true
    []:范围
    const re = /^[a-zA-Z]{3,5}$/; // 只要字符串在[]的范围内,并且是3-5位
    const str = 'Zoo';
    console.log(re.test(str)); // true
    []:范围
    const re = /^[a-zA-Z0-9]{3,5}$/; // 只要字符串在[]的范围内,并且是3-5位
    const str = 'Zoo';
    console.log(re.test(str)); // true
    []:规定开头
    const re = /^[a-z][a-zA-Z0-9]{3,5}$/; 
    const str = 'Zoo';
    console.log(re.test(str)); // false
    []:范围
    const re = /^[a-z][a-zA-Z0-9]{3,5}$/i;
    const str = 'Zoo';
    console.log(re.test(str)); // false
    []:定头定尾(以一位小写字母开头,中间一位小写字母或大写字母或数字,以3-5位大写字母结尾)
    const re = /^[a-z][a-zA-Z0-9][A-Z]{3,5}$/;
    const str = 'a1DDA';
    console.log(re.test(str)); // false
    []:匹配汉字
    const re = /^[\u4e00-\u9fa5]{3,5}$/;
    const str = '张三丰';
    console.log(re.test(str)); // true
    ():表示三到五组 do
    const re = /^(do){3,5}$/;
    const str = 'dodododo';
    console.log(re.test(str)); // true
    ():组
    const re = /^(do){3,5}$/;
    const str = 'dodododod';
    console.log(re.test(str)); // false
    ():表示do出现0-无限次
    const re = /^(do)*$/;
    const str = '';
    console.log(re.test(str)); // true
    ():表示do至少出现1次
    const re = /^(do)+$/;
    const str = 'do';
    console.log(re.test(str)); // true
    ():表示do最多出现1次
    const re = /^(do)?$/;
    const str = 'do';
    console.log(re.test(str)); // true
    ^:取反
    const re = /[^0-9]/;
    const str = 'helloworld';
    console.log(re.test(str)); // true
    .表示通配任意一个字符
    const re = /^.o.$/;
    const str = 'xox';
    console.log(re.test(str)); // true
    |:表示或者
    const re = /^男|女$/;
    const str = '男';
    console.log(re.test(str)); // true
    |:表示或者  这里的男|女并非是二选一的,因为他不是一个整体
    const re = /^男|女$/;
    const str = '男男女男女男女男女男女男女男女男女男女男女男女男女男女';
    console.log(re.test(str)); // true
    |:表示或者  二选一
    const re = /^(男|女)$/;
    const str = '男男女男女男女男女男女男女男女男女男女男女男女男女男女';
    console.log(re.test(str)); // false
    \:转义符   .表示模糊匹配,要使用\把他转义为普通的点
    const re = /^\.[a-z0-9A-Z]{2-4}$/;
    const str = '.js';
    console.log(re.test(str)); // true
   \d:数字   这里匹配六位数的邮编
    const re = /^\d{6}$/;
    const str = '000000';
    console.log(re.test(str)); // true
    exec和match区别:无g无()
    const re = /do/;
    const str = 'how do you do';
    console.log(re.exec(str)); // ['do']
    console.log(str.match(re)); // ['do']
    exec和match区别:有g无()
    const re = /do/g;
    const str = 'how do you do';
    console.log(re.exec(str)); // ['do']
    console.log(str.match(re)); // ['do','do']
    exec和match区别:无g有()
    const re = /(.+)do(.+)/g;
    const str = 'how do you do';
    console.log(re.exec(str)); // ['how do you do','how ',' you do']
    console.log(str.match(re)); // ['how do you do','how ',' you do']
    exec和match区别:有g有()
    const re = /(.+)do(.+)/g;
    const str = 'how do you do';
    console.log(re.exec(str)); // ['how do you do','how ',' you do']
    console.log(str.match(re)); // ['how do you do']
    replace:无g只替换一个
    const re = /do/;
    const str = 'how do you do';
    console.log(str.replace(re, 'de')); // how de you do
    replace:有g全部替换
    const re = /do/g;
    const str = 'how do you do';
    console.log(str.replace(re, 'de')); // how de you de

实战

1.去除字符串两边的空格

' a  b         '.replace(/(^\s+|\s+$)/g,'')       // 'a  b'

/(^\s+|\s+$)/的意思就是 以空白开头或者以空白结尾。

这里很容易陷入一个误区,会把正则写成/^(\s+)$/g,这个正则表达式的意思是,一个以空白开头,且以空白结尾,中间部分有大于1的空白。所以他只能替换一个为纯空白的字符串。
在这里插入图片描述

2.邮箱格式
111@qq.com 或111@qq.com.cn

/^\w+@\w+.[a-z]{3}(\.[a-z]{2})?$/

3.手机号

/1\d{10}/

以上。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值