什么是 RegExp?
RegExp 是正则表达式(Regular expression)的缩写,作用是对字符串执行模式匹配。
通常用于格式验证、正则替换、查找子串等
各种编程语言的正则表达式基本相同,不同的语言可能会有一些细小的差别
RegExp 语法
1.// 直接实例化
2.var reg = new RegExp(pattern [, flags])
3.// 隐式创建(推荐)
4.var reg = /pattern/flags;
参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。
参数 [, flags] 是一个可选的字符串,包含属性 “g”(global )、”i” (ignoreCase)和 “m”(multiline)。
ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。
概念:子表达式
在正则表达式中,使用括号括起来的内容是一个子表达式,子表达式匹配到的内容会被系统捕获至缓冲区,使用\n(n:数字)来反向引用系统的第n号缓冲区的内容。
场景:后面的内容要求与前面的一致,可以使用子表达式
1.// 查找连续相同的四个数字
2.var str = "1212ab45677778cd";
3.var reg = /(\d)\1\1\1/gi;
4.console.log(str.match(reg));
5.// OUTPUT:7777
概念:方括号(字符簇)
1.var str = "Is this all there is";
2.var patt1 = /[a-h]/g;
3.document.write(str.match(patt1));
4.// OUTPUT:h,a,h,e,e
方括号 作用
方括号
作用
[abc]
查找方括号之间的任何字符。
[^abc]
查找任何不在方括号之间的字符。
[0-9]
查找任何从 0 至 9 的数字。同 \d
[a-z]
查找任何从小写 a 到小写 z 的字符。
[A-Z]
查找任何从大写 A 到大写 Z 的字符。
[A-z]
查找任何从大写 A 到小写 z 的字符。
[0-9a-zA-Z]
查找0-9,a-z,A-Z
概念:元字符
元字符(Metacharacter)是拥有特殊含义的字符:
元字符 | 作用
—|—
\ | 转义符 (、)、/、\
| | 选择匹配符,可以匹配多个规则
. | 查找单个字符,除了换行和行结束符。
\w | 查找单词字符。字符 ( 字母 ,数字,下划线_ )
\W | 查找非单词字符。
\d | 查找数字。
\D | 查找非数字字符。
\s | 查找空白字符。空格
\S | 查找非空白字符。
\b | 匹配单词边界。
\B | 匹配非单词边界。
\0 | 查找 NUL 字符。
\n | 查找换行符。
\f | 查找换页符。
\r | 查找回车符。
\t | 查找制表符。
\v | 查找垂直制表符。
\xxx | 查找以八进制数 xxx 规定的字符。
\xdd | 查找以十六进制数 dd 规定的字符。
\uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符。
概念:量词
量词
作用
n+
匹配任何包含至少一个 n 的字符串。同 {1,}
n*
匹配任何包含零个或多个 n 的字符串。同 {0,}
n"border-top-style: solid; box-sizing: border-box; border-left-style: solid; height: 40px; border-top-color: rgb(221,221,221); vertical-align: top; border-bottom-style: solid; outline-width: medium !important; padding-bottom: 0.5em; border-bottom-color: rgb(221,221,221); text-align: center; padding-top: 0.5em; border-right-style: solid; outline-style: none !important; padding-left: 0.5em; margin: 0px; border-right-color: rgb(221,221,221); outline-color: invert !important; line-height: 1.6; padding-right: 0.5em; border-left-color: rgb(221,221,221)">匹配任何包含零个或一个 n 的字符串。同 {0,1}
n{X}
匹配包含 X 个 n 的序列的字符串。
n{X,Y}
匹配包含 X 至 Y 个 n 的序列的字符串。
n{X,}
匹配包含至少 X 个 n 的序列的字符串。
n$
匹配任何结尾为 n 的字符串。
^n
匹配任何开头为 n 的字符串。注意 /[^a] / 和 /^ [a]/是不一样的,前者是排除的,后者是代表首位。
("border-top-style: solid; box-sizing: border-box; border-left-style: solid; height: 40px; border-top-color: rgb(221,221,221); vertical-align: top; border-bottom-style: solid; outline-width: medium !important; padding-bottom: 0.5em; border-bottom-color: rgb(221,221,221); text-align: center; padding-top: 0.5em; border-right-style: solid; outline-style: none !important; padding-left: 0.5em; margin: 0px; border-right-color: rgb(221,221,221); outline-color: invert !important; line-height: 1.6; padding-right: 0.5em; border-left-color: rgb(221,221,221)">匹配任何其后紧接指定字符串 n 的字符串。正向预查
("border-top-style: solid; box-sizing: border-box; border-left-style: solid; height: 40px; border-top-color: rgb(221,221,221); vertical-align: top; border-bottom-style: solid; outline-width: medium !important; padding-bottom: 0.5em; border-bottom-color: rgb(221,221,221); text-align: center; padding-top: 0.5em; border-right-style: solid; outline-style: none !important; padding-left: 0.5em; margin: 0px; border-right-color: rgb(221,221,221); outline-color: invert !important; line-height: 1.6; padding-right: 0.5em; border-left-color: rgb(221,221,221)">匹配任何其后没有紧接指定字符串 n 的字符串。反向预查
RegExp 对象方法
test()
test() 方法检索字符串中是否存在指定的值。返回值是 true 或 false。
1.var patt1 = new RegExp('e');
2.console.log(patt1.test('some text'));
3.// OUTPUT:true
4.var patt2 = new RegExp('ee');
5.console.log(patt2.test('some text'));
6.// OUTPUT:false
1.// 判断是不是QQ号
2.// 1 首位不能是0 ^[1-9]
3.// 2 必须是 [5, 11] 位的数字 \d{4, 9}
4.var str = '80583600';
5.var regexp = /^[1-9][0-9]{4,10}$/gim;
6.if (regexp.test(str)) {
7. alert('is');
8.} else {
9. alert('no');
10.}
exec()
exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
1.var patt1 = new RegExp('e');
2.console.log(patt1.exec('some text'));
3.// OUTPUT:e
4.var patt2 = new RegExp('ee');
5.console.log(patt2.exec('some text'));
6.// OUTPUT:null
compile()
compile() 既可以改变检索模式,也可以添加或删除第二个参数。
1.var patt1=new RegExp("e");
2.document.write(patt1.test("The best things in life are free")); // true
3.// 改变了检索模式
4.patt1.compile("eee");
5.document.write(patt1.test("The best things in life are free")); // false
支持正则表达式的 String 对象的方法
search 检索与正则表达式相匹配的值。
1.var str = "Visit W3School!"
2.console.log(str.search(/W3School/))
3.// OUTPUT:6
match 找到一个或多个正则表达式的匹配。
1.var str="1 plus 2 equal 3"
2.console.log(str.match(/\d+/g))
3.// OUTPUT:1,2,3
replace 替换与正则表达式匹配的子串。
1.var str = "Visit Microsoft!"
2.console.log(str.replace(/Microsoft/, "W3School"));
3.// OUTPUT:Visit W3School!
1.// 找重复项最多的字符个数
2.var str = 'g21ss4aeba_ersb43sgnnsssstht6sss60snnsj8resw0_ss';
3.// split : 将字符串转化为数组
4.// sort : 对数组排序,ASCII
5.// join : 将数组转化为字符串
6.var str_new = str.split('').sort().join('');
7.document.write(str + '<br>');
8.document.write(str.split('') + '<br>');
9.document.write(str.split('').sort() + '<br>');
10.document.write(str.split('').sort().join('') + '<br>');
11.// 匹配字符,且重复这个字符,重复次数至少一次。
12.var regexp = /(\w)\1+/g;
13.var index = 0;
14.var value = '';
15.str_new.replace(regexp, function($0, $1) {
16. // document.write($0);
17. // document.write($1);
18. if (index < $0.length) {
19. index = $0.length;
20. value = $1;
21. }
22.});
23.document.write('重复项最多的字符是:' + value + ',个数是:' + index);
24.// OUTPUT:
25.// 0012344668__aabbeeegghjnnnnrrssssssssssssssssttw
26.// 重复项最多的字符是:s,个数是:16
split 把字符串分割为字符串数组。
1.var str = "How are you doing today"
2.document.write(str.split(/\s+/));
3.// OUTPUT:How,are,you,doing,today"external nofollow" href="mailto:'80583600@qq.com'">'80583600@qq.com'));
134.// console.log(myRegExp.isNumber('100a'));
135.// console.log(myRegExp.trim(' 100 '));
136.// console.log(myRegExp.isChinese('baixiaoming'));
137.// console.log(myRegExp.isChinese('小明'));
138.// console.log(myRegExp.isPostcode('412345'));
139.// console.log(myRegExp.isIDcard('42091119940927001X'));
140.// console.log(myRegExp.isURL('https://www.baidu.com/'));
141.// console.log(myRegExp.isDate('2017-4-4'));
142.// console.log(myRegExp.isIP('1.0.0.0'));
一、校验数字的表达式
1.数字:^[0-9]*$
2.n位的数字:^\d{n}$
3.至少n位的数字:^\d{n,}$
4.m-n位的数字:^\d{m,n}$
5.零和非零开头的数字:^(0|[1-9][0-9]*)$
6.非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})"*$ 或 ^-[1-9]\d*$
13.非负整数:^\d+$ 或 ^[1-9]\d*|0$
14.非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
15.非负浮点数:^\d+(\.\d+)"等字符:[^%&',;="XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$
2.2.这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
3.3.一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助~如果有疑问大家可以留言交流,谢谢大家对的支持!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]