注:正则表达式需要严格区分大小写
1.定义
* var reg=/abc/;
* var reg=new RegExp('abc');
2.正则表达式的用途和方法
正则表达式是构成搜索模式(search pattern)的字符序列。
例:
* var reg=/abc/;
* var str = 'abcdefg';
* reg.exec(str) 如果能匹配到的话返回一个array ;
第0项返回的是匹配的内容 index 表示的是索引
如果没有匹配成功返回 null;
* reg.test(str) 匹配字符串 如果匹配成功返回true 匹配失败返回false;
3.正则表达式模式
- {}限定正则表达式返回值个数
c{n} 表示n个连续的C
c{m,n} 大于等于m小于等于n,连续的c
c{n,} 大于等于n个连续的C
- 特殊字符限制正则表达式的所匹配的字符 *注:如在正则表达式中需要使用以下字符作为正常字符,需要先进行转义*
1.c* 大于等于0个连续的c 等价于c{0,}
2.c+ 大于等于1个连续的c 等价于c{1,}
3.c?大于等于0个小于等于1个 满足0个就算成功,返回一个空字符串 等价于c{0,1}
4.c^ 匹配以c开头的字符串,匹配成功返回该字符
5.c$匹配以c结尾的字符串,匹配成功返回该字符
6. .匹配所有除了/n以外的所有字符
7.[abc] 匹配[]内的任意一个字符,匹配成功返回该字符
[a-z]小写字母
[A-Z]大写字母
[0-9]数字
[a-zA-Z0-9]表示字母和数字
8.a|b匹配字符a或b,匹配成功返回a,b中的一个字符
9.()先计算括号里的表达式
10(^abc)表示反字符集合,匹配是除了a,b,c,以外的字符
- 字母构成的字符
1.\b
c\b匹配以c为左边界的字符
例:reg = /c\b/;
str='cmd';
reg.exec(str)匹配成功返回字符串c
\bc匹配以c为右边界的字符
例:reg = /\bc/;
str='维生素c';
console.log(reg.exec(str))
匹配字符的边界,也就是它匹配的是一个位置,而不是一个真正的字符,此位置一侧是字符,另一侧是非字符或者字符串边界(开始或者结束位置)
所以reg = /c\b/;
str='维生素c';
console.log(reg.exec(str))也能够匹配成功
\B非边界 c\B匹配的是不是边界的字符c;
2.\d 等价于[0-9]
c\d匹配的是数字0-9;
\D匹配的是非数字
3.\n换行 与.意义刚好相反
4.\s匹配单个空格;
\S匹配非空格;
5.\w 匹配字符=>[a-zA-Z0-9]
\W匹配非字符
6.(\w)(\w)
返回第一个\w匹配的字符和除去第一个匹配的字符后\w所匹配的字符的集合,第一个字符,第二个匹配的字符,长度为三的数组;
例: reg = /(\w)(\w)/;
str='blueidea';
console.log(reg.exec(str))
打印结果:Array(3)0: "bl"
1: "b"
2: "l"
groups: undefined
index: 0 input: "blue idea"length:3_
_proto__
7.(\w)(\w)\2\1
\2指的是第二个括号内匹配的内容;
\1指的是第一个括号内匹配的内容;
例:reg = /(\w)(\w)\2\1/;
str='woow';
console.log(reg.exec(str))
打印内容:Array(3)
0: "woow"
1: "w"
2: "o"
groups: undefined
index: 0
input: "woow"
length: 3__proto__: Array(0)
-
贪婪和非贪婪
默认正则表达式是贪婪的,只要在合法的情况下,它们会尽量多去匹配字符
当在表达式后加?则代表非贪婪,若匹配成功,则尽可能少的返回匹配的值;
例:reg = /c{1,}?/; str='ccccc'; execReg(reg,str);
打印结果只会返回一个c; -
(?=pattern)正向预查
要匹配的字符串,后面必须紧跟着pattern
例:reg = /cainiao(?=8)/; str='cainiao9'; execReg(reg,str);
返回null;只有str='cainiao8';返回cainiao,但不返回pattern; -
?!pattern
要匹配的字符串,后面必须不能紧跟着pattern
例:reg = /blue(?!idea)/; str='bluetooth'; execReg(reg,str);
返回bule,不返回pattern;
4.使用字符串的方法执行正则表达式
** 注-g表示的是所有文件中 **
1.match
str.match()返回到匹配的值;
例:
var str = 'hello world';
console.log(str.match(/world/))//world
console.log(str.match(/World/))//null
console.log(str.match('e'))//e
2.search()
str.search()匹配某个字符,并返回该字符索引;
例:
var reg = /idea/;
var str = 'blueidea';
var pos = str.search(reg);
document.write(pos);
返回值为四;
3.split()
str.split(),返回分割后的数组;
例:var str = 'hello world';
console.log(str.split(/\s+/))// ["hello", "world"] ;
4.replace() str.replace() 返回修改后的字符串 replcae传参分以下几种情况:
一,两个参数是字符串
str.replace(subStr,s);
返回一个新的字符串
二,第一个参数是正则,第二个参数是字符串
将正则匹配到的值用字符串去代替
三,第一个参数是正则,第二个参数是$1,2...99
$1...$99分别表示正则表达式的第1...99中的子表达式匹配到的值
例如:
var str3 = '这是一段原始文本,"34c这要替换4d"!';
var newStr = str3.replace( /([0-9])([a-z])/g,"$1" );
console.log( newStr ); // 这是一段原始文本,"34这要替换4"!
四,第一个参数是正则,第二个参数是函数
正则表达式有子表达式情况下,函数的第一个参数是第一个匹配到的字符串,接下来分别是各个子表达式匹配的值,然后是索引,最后一个参数是字符串本身。
5.修饰符
i ignore - 不区分大小写 将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。
g global - 全局匹配 查找所有的匹配项。
m multi line - 多行匹配 使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。
s 特殊字符圆点 . 中包含换行符 \n 默认情况下的圆点 . 是 匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。
6,事例练习
1.匹配收手机号 13xx 14xx 15xx 17xx 18xx 11位
var reg1 = /^1[34578]\d{9}$/
var reg1 = /^1[34578][0-9]{9}$/
var reg1 = /^(13|14|15|17|18|19)[0-9]{9}$/
2.匹配邮箱 xx@xx.nnn xx可以是字母数字_ . - nnn 字母
reg2 = /^[\w._-]+\@[a-zA-Z0-9._-]+\.[A-z]{2,4}$
3.匹配身份证号 15位全数字 或 18位最后一位可以是X
reg3 = /^\d{15}$|^\d{17}[X0-9]$/
reg3 = /^(\d{14}|\d{17})[X\d]$/
4.匹配用户名正则,4到16位(字母,数字,下划线,减号)
var reg4=/^[\w_-]{4,16}$/;
注:要以$符号结尾