正则表达式简单介绍以及JavaScript中的使用

什么是正则

在常见的字符串检索或替换中,我们需要提供一种模式表示检索或替换的规则。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。

这里只讲解简单的内容。

简单的正则

  • /abc/
    • 匹配包含 “abc” 的字符串,如 “abcd”
  • /[a-z]{4}/
    • 匹配包含 4 个小写英文字母的字符串,如 “1abcd2”
  • /\d\d\d/
    • 匹配包含三个数字的字符串,如 “a123”

正则规则

字符描述栗子
.任意字符(除换行符以外:\n,\r,\u2028,\u2029)/.../.test('1a@');
\d数字 0-9/\d\d\d/.test('123');
\D非\d,即不是数字 0-9 的字符/\D\D\D/.test('ab!');
\w数字 0-9,或字母 a-z 及 A-Z(大小写),或下划线/\w\w\w\w/.test(aB9_);
\W非\w,同理/\W\W\W/.test('@#$');
\s空格符、TAB、换页符、换行符/\sabc/.test(' abc');
\S非\s,同理
\t \r \n \v \fTAB、回车、换行、垂直制表符、换页符

范围符号

字符描述栗子
[...]字符范围 [a-z] [0-9] [A-Z0-9a-z_]【这个跟上面\w是一个意思】寄几动手试试
[^...]字符范围以外 [^a-z] [^abc]
^行首/^Hi/.test('Hi, dalao')
$行尾/test$/.test('do a test')
\b零宽单词边界
什么是零宽单词边界?
单词:指的就是上面的 \w
边界:就是单词的两侧,不是说每一个单词的两侧,注意了
/\bno/.test('a no')
测试零宽单词边界是什么:
'a no ! 啊 - . , . / _'.replace(/\b/g, '①')
输出:”①a① ①no① ! 啊 - . , . / ①_①”
\B非\b,同理

分组

字符描述栗子
(x)分组,并记录匹配到字符串。单独写的话没啥意义,一般配合\n(n是数字)
\n (n是数字)表示使用分组符(x)匹配到的字符串/(abc)\1/.test('abcabcccc');
(?:x)仅分组/(?:abc)(def)\1/.test('abcdefdeffff');

重复

字符描述栗子
x*
x+
重复次数>=0,就是说可以是只出现0次
重复次数>0,就是说最少要出现一次
贪婪算法,多多少都可以
/abc*/ 将匹配ab、abc、abcccc
/abc+/ 将匹配abc、abcccc
x*?
x+?
重复次数=0,即匹配0个
重复次数=1,即匹配一个,多了不匹配
非贪婪算法,多了就不要了
/abc*?/将只匹配ab
/abc+?/将只匹配abc
x?出现0或1次
x|yx或者y/x|y/ 匹配x,也匹配y
/ab|cd|ef/匹配ab或cd或ef
x{n}
x{n,}
x{n,m}
重复n次
重复>=n次
重复>=n,<=m次
/x{5}/匹配xxxxxoo,不匹配xxo
/x{1,3}/匹配x,xx,xxx

三个FLAG

FLAG描述栗子
global匹配整个字符串,有些查询可能匹配到第一个就结束了。/a/g或者RegExp('a', 'g')
ignoreCase不区分大小写,字面意思。/aaa/i或者RegExp('aaa', 'i')
mutiline是否需要在分行、跨行时依然执行检索。
注意
1、目标字符串只有一行的时候 “abcabc” mutiline没有意义。
2、正则表达式不含 ^ 或 $ 时,mutiline没有意义
/^abc/m.test('aa\nabc')或者RegExp('^abc', 'm')

提示:三个FLAG都是可以随意混搭的
栗子:/a/gmi/a/igm都是一个意思,同理RegExp('a', 'mig')RegExp('a', 'mgi')

RegExp对象属性

属性:globalignoreCasemutilinesource

/abc/g.global; // true
/abc/i.ignoreCase; // true
/abc/m.mutiline; // true
/abc/gmi.source; // "abc"

RegExp对象方法

方法描述栗子
execmatch有点像,不过是反过来。match是字符串match正则,exec是正则exec字符串/abc/.exec('abcdef') 返回 “abc”
test即是否匹配/abc/.test('abcdef') 返回 true
toString即整个正则的内容/abc/.toString() 返回 “/abc/”
compile可以改变正则的一些属性var reg = /abc/;
reg.compile('def');这时打印reg会看到是/def/
reg.test('def');

string类型与正则相关的方法

字符描述栗子
String.prototype.search返回匹配的index'ddddabcabcdefg'.match(/(abc)\1/);
String.prototype.replace替换,返回结果字符串(变量本身不会改变)'aabbbbcc'.replace(/b+?/, '1');替换第一个
'aabbbbcc'.replace(/b+?/g, '1');替换全部
String.prototype.match匹配,返回匹配数组或者null'aabbbbcc'.match(/b+/);
'aabbdbbcc'.match(/b+/g);
String.prototype.split分割字符串'aabbbbcc'. split(/b+/); // ["aa", "cc"]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值