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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Headmaster_Tan/article/details/80384032

什么是正则

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

这里只讲解简单的内容。

简单的正则

  • /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 \f TAB、回车、换行、垂直制表符、换页符

范围符号

字符 描述 栗子
[...] 字符范围 [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|y x或者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对象方法

方法 描述 栗子
exec match有点像,不过是反过来。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"]

猜你喜欢

转载自blog.csdn.net/Headmaster_Tan/article/details/80384032
今日推荐