正则表达式

元字符(限定符)

元字符含义
.除了\n以外的任意一个单个字符
[]范围
()分组,提升优先级
|或者
*0-多次
+1-多次
?0-1次
{0,}*
{1,}+
{0,1}?
\d数字
\D非数字
\s空白符
\S非空白符
\w非特殊符号
\W特殊符号
^取反、限定开头(后跟字符集)
$以…结束
\b单词边界

示例

表达式含义
[0-9]0-9之间的任意一个数字
[a-zA-Z]所有字母中的任意一个
[.]就是一个. []可以把其中元字符的意义干掉
[0-9]|[a-z]要么是一个0-9内的数字,要么是一个小写字母

1、身份证的正则表达式(15位或者18位)

([1-9][0-9]{14})|([1-9][0-9]{16}[0-9xX])

([1-9][0-9]{14})([1-9][0-9]{16}[0-9xX]?

2、座机号码的正则表达式

010-19876754

0431-87123490

[0-9]{3,4}[-][0-9]{8}

\d{3,4}[-]\d{8}

3、qq号码的正则表达式(5-11位)

[1-9][0-9]{4,10}

4、手机号码的正则表达式

130 131 132 133 134 135 136 137 138 139

143 147

150 151 152 153 154 155 156 157 158 159

170 171 173 176 177

180 181 182 183 184 185 186 187 188 189

([1][358][0-9]{8})|([1][4][37]{8})|([1][7][01367]{8})

5、邮箱的正则表达式

[0-9a-zA-Z_.-]+[@][0-9a-zA-Z_.-]+([.][a-z]+){1,2}

创建正则表达式对象

//方法一:通过构造函数创建对象
//方法二:字面量的方式创建对象

var reg=new RegExp(/\d{5}/);

var str='my phoneNumber is 123';

//调用方法验证字符串是否匹配
console.log(reg.test(str));//false
console.log(reg.test('my phoneNumber is 12345678'));//true

//字面量的方式创建正则表达式对象
var reg=/[a-z]{5}/;
console.log(reg.test('jas'));//false
console.log(reg.test('dgfjshgn'));//true

//判断
console.log(/b|(ara)/.test("abra"));//true

//非特殊符号——_不是特殊符号
console.log(/\w/.test("*"));//false

//特殊符号
console.log(/\W/.test("*"));//true

正则表达式其他方法的使用

match()

  • 拿出str里面所有的邮箱
var str = "123123@xx.com,fangfang@valuedopinions.cn 286669312@qq.com 2、emailenglish@emailenglish.englishtown.com 286669312@qq.com...";
var array=str.match(/[0-9a-zA-Z_.-]+[@][0-9a-zA-Z-._]+([.][a-z]+){1,2}/g);
console.log(array);

在这里插入图片描述

  • 把str里面的数字全部提取出来
var str="中国移动:10086,中国联通:10010,中国电信:10000";
console.log(str.match(/\d{5}/g));

在这里插入图片描述

  • 提取str里的年月日(正则表达式.$1…)
var str='today is 2021-02-11';
var arr=str.match(/[a-z]+\s[a-z]+\s(\d{4})[-](\d{2})[-](\d{2})/g);
console.log(RegExp.$1);//2021
console.log(RegExp.$2);//02
console.log(RegExp.$3);//11

replace()

var str='晚夜微雨问海棠,雨...';
str=str.replace(//g,'rain');
console.log(str);

在这里插入图片描述

  • 去掉空格(对比trim())
var str='   此间少年 , 此生尽兴便可  ';
//去掉两边空格
console.log(str.trim());

//去掉所有空格
console.log(str.replace(/\s+/g,''));

在这里插入图片描述
此外,在ES10中还扩展了trimStart()、trimEnd()

  • 将str中所有h替换成S,忽略大小写(全局g+忽略大小写i)
var str='hHhHaaahjcskaj';
console.log(str.replace(/[h]/gi,'S'));

在这里插入图片描述

exec(str)

正则表达式对象.exec方法传入字符串

var str="中国移动:10086,中国联通:10010,中国电信:10000";
var reg=/\d{5}/g;
var array=reg.exec(str);
// console.log(array);

while(array!=null){
    console.log(array);
    array=reg.exec(str);
}

在这里插入图片描述

ES9正则扩展

命名捕获分组

需求:提取下面str中的url和text
法一:用下标

//声明一个字符串
var str="<a href='https://www.baidu.com/'>百度一下,你就知道</a>";

//提取url与标签文本——用下标
var reg=/<a href='(.*)'>(.*)<\/a>/;
var array=reg.exec(str);
console.log(array);

console.log(array[1]);//url
console.log(array[2]);//text

在这里插入图片描述

法二:用命名捕获(更方便,便于维护,下标可能会根据str结构发生变化)

var str="<a href='https://www.baidu.com/'>百度一下,你就知道</a>";
var reg=/<a href='(?<url>.*)'>(?<text>.*)<\/a>/;
var array=reg.exec(str);
console.log(array);

console.log(array.groups.url);//url
console.log(array.groups.text);//text

在这里插入图片描述

正则断言

正向断言(判断后面的字符)
反向断言(判断前面的字符)

需求:提取下面str中的55555

 let str='hh5143617学正则表达式很快乐呀55555难道不是吗';

 //正向断言
 var reg=/\d+(?=难)/;
 console.log(str.match(reg));

 //反向断言
 var reg=/(?<=呀)\d+/;
 const result=reg.exec(str);
 console.log(result);
 console.log(result[0]);

在这里插入图片描述

dotAll模式

元字符.表示出了\n以外的所有字符,在后面加上s后表示任意字符,便于处理换行的问题。

需求:提取标签中的文本

 <script>
     let str=`
         <ul>
             <li>
                 <a>晚夜微雨问海棠</a>
                 <p>镜予歌/陈亦洺/喧笑</p>
             </li>
             <li>
                 <a>鱼遇</a>
                 <p>依旧在雨中等你</p>
             </li>
         </ul>
     `;

     const reg=/<li>.*?<a>(?<song>.*?)<\/a>.*?<p>(?<singer>.*?)<\/p>/gs;
     let result;
     let data=[];
     while(result=reg.exec(str)){
         data.push({song:result.groups.song,singer:result.groups.singer});
     }
     console.log(data);
 </script>

在这里插入图片描述

ES11-String.prototype.matchAll

let str=`
    <ul>
        <li>
            <a>晚夜微雨问海棠</a>
            <p>镜予歌/陈亦洺/喧笑</p>
        </li>
        <li>
            <a>鱼遇</a>
            <p>依旧在雨中等你</p>
        </li>
    </ul>
`;

const reg=/<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>/gs;
const result=str.matchAll(reg);//result是一个对象,可用for...of循环

console.log(result);
const arr=[...result];
console.log(arr);

在这里插入图片描述
在这里插入图片描述

完结撒花,新年快乐hhh~
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值