1.概念
2.创建方式:两种
3.重要概念:子表达式
4.匹配模式 & 修饰符:i、m、g
5.字符
6.正则的特性:贪婪性和懒惰性
7.常用方法:实例方法与字符串方法
1.概念:一种字符串匹配的模式
2.创建方式
1.两种方式
var reg = /pattern/flags
// 字面量创建方式
var reg = new RegExp(pattern,flags);
//实例创建方式
pattern:正则表达式
flags:标识(修饰符)
标识主要包括:
1. i 忽略大小写匹配
2. m 多行匹配,即在到达一行文本末尾时还会继续寻常下一行中是否与正则匹配的项
3. g 全局匹配 模式应用于所有字符串,而非在找到第一个匹配项时停止
2.字面量创建方式和构造函数创建方式的区别
字面量创建方式不能进行字符串拼接,实例创建方式可以
var regParam = 'cm';
var reg1 = new RegExp(regParam+'1');
var reg2 = /regParam/;
console.log(reg1); // /cm1/
console.log(reg2); // /regParam/
字面量创建方式特殊含义的字符不需要转义,实例创建方式需要转义
var reg1 = new RegExp('\d'); // /d/
var reg2 = new RegExp('\\d') // /\d/
var reg3 = /\d/; // /\d
3.重要概念:子表达式
子表达式在正则表达式中,通过一对圆括号括起来的内容,我们就称之为“子表达式”。如:var reg = /\d(\d)\d/gi;
捕获在正则表达式中,子表达式匹配到相应的内容时,系统会自动捕获这个行为,然后将子表达式匹配到的内容放入系统的缓存区中。我们把这个过程就称之为“捕获”。
反向引用
在正则表达式中,我们可以使用\n(n>0,正整数,代表系统中的缓冲区编号)来获取缓冲区中的内容,我们把这个过程就称之为“反向引用”。
应用:查找连续的相同的四个数字,如:1111、6666
var str = 'gh2396666j98889';
// 1:子表达式匹配数组
// 2:发生捕获行为,把子表达式匹配的结果放入缓存区
// 3:使用反向引用获取缓存中的结果进行匹配
var reg = /(\d)\1\1\1/;
console.log(str.match(reg));
4.匹配模式 & 修饰符:i、m、g
匹配模式也就修饰符:表示正则匹配的附加规则,放在正则模式的最尾部。修饰符可以单个使用,也可以多个一起使用。
在正则表达式中,匹配模式常用的有两种形式:g :global缩写,代表全局匹配,匹配出所有满足条件的结果,不加g第一次匹配成功后,正则对象就停止向下匹配;i :ignore缩写,代表忽略大小写,匹配时,会自动忽略字符串的大小写
语法:var reg = /正则表达式/匹配模式;
5.重要字符
\ 转义字符
^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"
$ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"
\b :匹配一个单词边界
\B :匹配非单词边界
匹配符:
[a-z] 匹配字符a到字符z之间的任一字符
[A-Z] 匹配字符A到字符Z之间的任一字符
[0-9] 匹配数字0到9之间的任一数字
[0-9a-z] 匹配数字0到9或字符a到字符z之间的任一字符
[0-9a-zA-Z] 匹配数字0到9或字符a到字符z或字符A到字符Z之间的任一字符
[abcd] 匹配字符a或字符b或字符c或字符d
[1234] 匹配数字1或数字2或数字3或数字4
[^a-z] 匹配除字符a到字符z以外的任一字符
[^0-9] 匹配除数字0到9以外的任一字符
[^abcd] 匹配除a、b、c、d以外的任一字符
元字符:
\d 匹配一个数字字符,与使用[0-9]等价
\D 匹配一个非数字字符,还可以使 [^0-9]
\w 匹配包括下划线的任何字母数字下划线字符,还可以使用 [0-9a-zA-Z_]
\W 匹配任何非字母数字下划线字符,还可以使用[^\w]
\s 匹配任何空白字符
\S 匹配任何非空白字符,还可以使用[^\s]
. 匹配除 “\n” (换行符) 之外的任何单个字符
[\u4e00-\u9fa5] 匹配中文 字符
限定符:
*
:匹配前面元字符0次或多次
+匹配前面元字符1次或多次
? 匹配前面元字符0次或1次
{n} 精确匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
或者:
x|y 匹配x或y
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)
注:优先级是从左到右
其他:
[^xyz]
不匹配这个集合中的任何一个字符
[\b] 匹配一个退格符
\b 匹配一个单词的边界
\B 匹配一个单词的非边界
\cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M
\d 匹配一个字数字符,/\d/ = /[0-9]/
\D 匹配一个非字数字符,/\D/ = /[^0-9]/
\n 匹配一个换行符
\r 匹配一个回车符
\s 匹配一个空白字符,包括\n,\r,\f,\t,\v等
\S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/
\t 匹配一个制表符
\v 匹配一个重直制表符
\w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9]
\W 匹配一个不可以组成单词的字符,如[\W]匹配"
5.98
"
中
的
5.98"中的
5.98"中的,等于[^a-zA-Z0-9]。
6.正则的特性
1.贪婪性
所谓的贪婪性就是正则在捕获时,每一次会尽可能多的去捕获符合条件的内容。
如果我们想尽可能的少的去捕获符合条件的字符串的话,可以在量词元字符后加?
2.懒惰性
懒惰性则是正则在成功捕获一次后不管后边的字符串有没有符合条件的都不再捕获。
如果想捕获目标中所有符合条件的字符串的话,我们可以用标识符g来标明是全局捕获
7.方法
通常对于一个正则对象来讲,我们能够使用的方法基本上有三个,即regObj.test , regObj.exec及regObj.compile
<script type="text/javascript">
//①test()判断字符串中是否出现某个字符串,返回布尔值
var re = /abc/;
var str = '00abc66';
console.log(re.test(str));
//②exec()查找并返回字符串中指定的某个字符串,只匹配一次
var re = /abc/;
var str = 'a0bc88abc00abc';
console.log(re.exec(str));
//③compile()方法用于改变正则匹配的内容
var re = /ab/;
var str = "aabcdef";
console.log(re.test(str)); //true
re.compile(/bd/);
console.log(re.test(str)); //false
re.compile('66');
console.log(re.test(str)); //false
</script>
以上就是正则对象及其方法,其实在使用的过程中,JS中的String类型的对象也拥有一些和正则相关的方法,如下:
<script type="text/javascript">
//①search()方法,返回符合条件的字符串首次出现的位置(下标)
var re = /abc/;
var str = '00abc66';
console.log(str.search(re));
//②match()方法,返回查找的结果,如果查询不到返回NULL
console.log(str.match(re));
//③replace()方法,将匹配到的内容替换成指定内容
console.log(str.replace(re,"*"));
//④split()方法,将字符串分割成字符串数组
console.log(str.split(re));
</script>