博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
重学前端(9)正则还真要多练
阅读量:6262 次
发布时间:2019-06-22

本文共 3115 字,大约阅读时间需要 10 分钟。

正则表达式简介

什么是正则表达式

正则表达式:用于匹配规律规则的表达式,正则表达式最初是科学家对人类神经系统的工作原理的早期研究,现在在编程语言中有广泛的应用。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

正则表达式的作用

  1. 给定的字符串是否符合正则表达式的过滤逻辑(匹配)
  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分(提取)
  3. 强大的字符串替换能力(替换)

正则表达式的特点

  1. 灵活性、逻辑性和功能性非常的强
  2. 可以迅速地用极简单的方式达到字符串的复杂控制
  3. 对于刚接触的人来说,比较晦涩难懂

正则表达式的组成

  • 普通字符
  • 特殊字符(元字符):正则表达式中有特殊意义的字符

元字符

常用元字符串

元字符 说明
\d 匹配数字
\D 匹配任意非数字的字符
\w 匹配字母或数字或下划线
\W 匹配任意不是字母,数字,下划线
\s 匹配任意的空白符
\S 匹配任意不是空白符的字符
. 匹配除换行符以外的任意单个字符
^ 表示匹配行首的文本(以谁开始)
$ 表示匹配行尾的文本(以谁结束)

限定符

限定符 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

其它

[] 字符串用中括号括起来,表示匹配其中的任一字符,相当于或的意思[^]  匹配除中括号以内的内容\ 转义符| 或者,选择两者中的一个。注意|将左右两边分为两部分,而不管左右两边有多长多乱() 从两个直接量中选择一个,分组   eg:wh(a|e)y匹配whay和whey[\u4e00-\u9fa5]  匹配汉字复制代码

demo

验证手机号:

^\d{
11}$复制代码

验证邮编:

^\d{
6}$复制代码

验证邮箱 xxx@why.cn:

^\w+@\w+\.\w+$复制代码

JavaScript 中使用正则表达式

创建正则对象

方式1:

var reg = new Regex('\\d', 'i');var reg = new Regex('\\d', 'gi');复制代码

方式2:

var reg = /\d/i;var reg = /\d/gi;复制代码

参数

标志 说明
i 忽略大小写
g 全局匹配
gi 全局匹配+忽略大小写

正则匹配

// 匹配日期var dateStr = '2019-04-10';var reg = /^\d{4}-\d{1,2}-\d{1,2}$/console.log(reg.test(dateStr));复制代码

正则提取

// 1. 提取工资var str = "张三:1000,李四:5000,王五:8000。";var array = str.match(/\d+/g);console.log(array);// 2. 提取email地址var str = "123123@xx.com,fuck@valuedopinions.cn 286669312@qq.com 2、emailenglish@emailenglish.englishtown.com 286669312@qq.com...";var array = str.match(/\w+@\w+\.\w+(\.\w+)?/g);console.log(array);// 3. 分组提取  // 3. 提取日期中的年部分  2015-5-10var dateStr = '2016-1-5';// 正则表达式中的()作为分组来使用,获取分组匹配到的结果用Regex.$1 $2 $3....来获取var reg = /(\d{4})-\d{1,2}-\d{1,2}/;if (reg.test(dateStr)) {  console.log(RegExp.$1);}复制代码

正则替换

// 1. 替换所有空白var str = "   123AD  asadf   asadfasf  adf ";str = str.replace(/\s/g,"xx");console.log(str);// 2. 替换所有,|,var str = "abc,efg,123,abc,123,a";str = str.replace(/,|,/g, ".");console.log(str);复制代码

整理了小demo,可以自己拓展

var str = 'b';//    var reg = /\d/; //只要字符串中有数字,就符合要求//    var reg = /\D/; //只要字符串中有非数字,就符合要求//    var reg = /\w/; //只要字符串中有数字或者字母,或者下划线,就符合要求//    var reg = /\W/; //只要字符串中有数字或者字母,或者下划线,就符合要求//  var reg = /\s/; //只要字符串中有空白字符就符合要求//  var reg = /\S/; //只要字符串中有非空白字符就符合要求//  var reg = /./; //只要有非换行符就符合条件//  var reg = /^a/; //只要字符串以a开头就符合条件//  var reg = /a$/; //只要字符串以a结尾就符合条件//  var reg = /^abc$/; //要求字符串中只能有abc//  var reg = /^\d{11}$/;//要求字符串中只能出现11次数字//  var reg = /^\d{3,}$/;//要求字符串中只能出现3次及以上的数字//  var reg = /\d{3,}/;//要求字符串中只要包含3个及以上的数字就符合条件//  var reg  = /^\d{3,5}$/;//字符串中只能出现3~5次的数字//  var reg = /^\d*$/; //字符串中要么什么都没有,要么就只能是数字//  var reg = /^\d+$/; //字符串中至少一个数字//  var reg = /^\d?$/; //字符串中要么什么都没有,要么只能有一个数字//  var reg = /^[abcd]$/; //只能有一个字符,而这个字符可以是中括号的任何一个//  var reg = /^[^abcd]$/; //只能有一个字符,而这个字符可以不能有中括号的任何一个//  var reg = /^\.$/; // 字符串中只能有一个点//  var reg = /^a|c$/; //以a开头获取以c结尾//  var reg = /^wh(a|g)y$/ //whay或者是whgy//    var reg = /^[a-Z]$/; //错误的//  var reg = /^[a-zA-Z]$/;//  var reg = /^[A-z]$/;//大写字母在字符集中排序更靠前  console.log(reg.test(str));  复制代码

结语

  • 正则表达式,这东西,简单的时候很简单,复杂的时候贼复杂,归根到底,还是自己不够熟悉,或者说忘了,整理的时候我发现都会,但是过一段时间很多就会忘了,因为大部分情况下都是google,so 要想稳,那就只能多练,多整理,然后忘了的时候,有个印象,重拾也快。
  • 走的太远,回头看看会发现收获很多

转载地址:http://xnesa.baihongyu.com/

你可能感兴趣的文章
Hive自定义UDF和聚合函数UDAF
查看>>
lzg_ad:使用Virtual PC 部署和测试XP Embedded 发布镜像
查看>>
关于ssh 配置文件的参数说明
查看>>
金山词霸2005无法用鼠标取词
查看>>
Java Http断点下载文件
查看>>
我的微软最有价值专家(Microsoft MVP)之路
查看>>
如何在gcc编译时指定共享库的搜索路径?
查看>>
如何安装和配置 Rex-Ray?- 每天5分钟玩转 Docker 容器技术(74)
查看>>
Linux下SENDMAIL+OPENWEBMAIL(1)
查看>>
无法添加内核模式驱动的打印机
查看>>
Spring Cloud规范实战
查看>>
javascript event 事件
查看>>
2012自学CCNP路由与交换之三网络设备造型及验收
查看>>
lf4j+logback配置方式,logback.groovy使用备忘
查看>>
RHEL,centOS下vncserver,service命令关联的rpm包
查看>>
slf4j+logback配置方式,logback.groovy使用备忘
查看>>
android中阿拉伯文研究
查看>>
SCCM TP4安装客户端Agent
查看>>
配置PIX515E DMZ的基本方法与故障排除
查看>>
HA Cluster—ansible批量操作
查看>>