详解正则表达式

正则表达式的解释

字面量语法

字符匹配
字母或数字自身
\0表示空字符,null,等价\u0000
\t表示制表符 \u0009
\n表示换行符 \u000A
\v表示垂直制表符
\f表示换页符
\r表示回车符
\xnn有十六进制数表示escape字符数
\uxxxx十六进制的Unicode
\xxx八进制字符

以上正则表达式为基本的字面量语法,汉字的范围:/1+$/

修饰符

字符匹配
g全局匹配
i忽略大小写
m多行匹配

阅读以上内容我们正式来看看正则表达式还有哪些语法


范围类

范围类是表示可以匹配一定范围内的字符比如**[a-z]、[0-9]**

"2016-09-01".replace(/[0-9]/g,"A") //AAAA-AA-AA

预定义类

正则表达式为了方便也提供了一些预定义类:

字符等价类匹配
.[^\r\n]除了回车换行
\d[0-9]数字字符
\D[^0-9]非数字字符
\s[\t\n\x0B\f\r]空白符
\S[^\t\n\x0B\f\r]非空白符
\w[a-zA-Z0-9_]字母数字下划线
\W[^a-zA-Z0-9_]非字母数字下划线

预定义类提供了比较常用的类

边界

字符匹配
^以XXX开头
$以XXX结尾
\b单词边界
\B非单词边界

对于单词边界的解释:
1.当我们要将字符串’this is a apple’中is替换为字母A应该怎么做呢?

//1.首先我们来尝试一下
'this is a apple'.replace(/is/g,'A'); //输出"thA A a apple"
//2.只有单词旁边有空格才会被替换??于是
'this is a apple'.replace(/\sis\s/g,'A'); //输出"thisAa apple"
//3.来试试单词边界
'this is a apple'.replace(/\bis\b/g,'A'); //输出"this A a apple"
//4如果我们想改变this中的is呢?
'this is a apple'.replace(/\Bis\b/g,'A');//输出"thA is a apple"

###量词

字符匹配
最多一次
+至少一次
*任意次
{n}n次
{n,m}n到m次
{n,}至少n次

贪婪模式与非贪婪模式

正则表达式默认是按照尽可能多的匹配:

'12345678'.replace(/\d{3,6}/g,'A');//A78
//若改为非贪婪模式只需要将量词后加上?
'12345678'.replace(/\d{3,6}?/g,'A')//AA78

分组

当你要匹配一个单词匹配三次怎么用呢?

'hellohellohellohello'.replace(/(hello){2}/g,'A')//Ahello

'hello'.replace(/hello|world/g,'A')
hello或者world而不是o或w
'helloorldhellworld'.replace(/hell(o|w)orld/g,'A')//AA

反向引用

假定一个需求:YYYY-MM-DD替换为DD-MM-YYYY

'2010-09-08'.replace(/(\d{4})-(\d{2})-(\d{2})/,'$3/$2/$1');
$n表示的是第几个分组

忽略引用

在分组里面加上?:

'2010-09-08'.replace(/(?:\d{4})-(\d{2})-(\d{2})/,'$3/$2/$1');
//"$3/08/09"
$3不存才了

前瞻与后顾

先来看看这张表

名称正则匹配
正向前瞻exp(?=assert)
负向前瞻exp(?=assert)
正向后顾exp(?=assert)js不支持
负向向后顾exp(?=assert)js不支持

由于js不支持所以不予介绍了
前瞻:js从文本头向尾部解析,文本尾部叫做"前"
来看之前的一个列子
'this is a apple’将is替换为A

'this is a apple'.replace(/is(?=\sa)/g,'A'); 
//输出"this A a apple"

正则表达式属性与方法

-属性
1.globle:全局匹配
2.ignoreCase:忽略大小写
3.mutiline:多行匹配
4.lastIndex:当前匹配字符最后一个字符的下一个的位置
5.soure:正则表达式文本字符串
-方法
1.test他会从lastIndex开始匹配
2.exec


  1. \u4e00-\u9fa5 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值