问:正则表达式是用来做什么的?
答:匹配字符串
1.创建(两种方法)
(1)var reg = /xyz/; //字面量新建
(2)var reg = new RegExp('xyz'); //实用RegExp对象的构造函数
2.直接用
var reg = /^<(\w+)([^>]{0,})>(.*?)<\/\1>/g;
var html = '<div class="test">Hello<b>world</b></div>';
var match = reg.exec(html);
console.log(match[1]); //div
console.log(match[2]); //class="test"
console.log(match[3]); //Hello<b>world</b>
由这段代码
(1)字面量字符和基本元字符
- 字面量字符:就是字面的含义,比如/a/匹配的就是a
- 点字符(.),匹配除回车(\r),换行(\n),行分隔符(\u2028)和段分隔符(\u2029)以外的所有字符。
- 位置字符(^,$):^表示字符串的开始位置,$表示字符串的结束位置
- 选择符(|):|表示或关系,比如/aaa|bbb/表示匹配aaa或bbb
- 转义符(\):那些有特殊含义的字符,如果要匹配他们本身,需要在他们前面加上反斜杠\,比如\?
(2)先看符号(),[],{}(也是元字符)
- ():表示组匹配,放在( )里面的字符组成一组字符,并分为捕获组(会捕获并在数组中返回)和非捕获组,先行断言和先行否定断言。
- []:表示字符类,放在[ ]里面的字符,只取其中的一个。
- {}:表示重复类,{n}表示恰好重复n次,{n,}表示至少重复n次,{n,m}表示重复不少于n次,不多于m次。
(3)量词符(?,*,+)(也是元字符)
?:表示某个模式出现0次或1次,相当于{0,1},(如果?出现在量词符后,表示非贪婪模式,一旦满足就不再往下匹配。量词符,默认情况下都是贪婪模式)
*:星号表示某个模式出现0次或多次,相当于{0,}
+:加号表示某个模式出现1次或多次,相当于{1,}
(4)特殊字符
\cX:表示Ctrl-[X],其中的X是A-Z之中任一个英文字母,用来匹配控制字符。
[\b]:匹配退格键(U+0008),不要与\b混淆。
\n:匹配换行键。//next-line
\r:匹配回车键。//return
\t:制表符。//tab
\v:匹配垂直制表符。//vertical
\f:匹配换页符。
\0:匹配null字符。
(5)预定义模式
\d:匹配0-9之间的任一数字,相当于[0-9]; //这里”-“在字符类里面表示连字符,表示从……到……这一连续区间,在其他地方都是普通字符,d代表digital
\D:匹配所有0-9以外的字符,相当于[^0-9]. //大写形式与小写形式含义相反,这里“^”出现在在字符类里面,是脱字符,表示除……以外;如果出现在在字符串开始的地方,表示以……开始,$放在字符串结束的地方,表示以……结束。
\w:匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_]。//w代表word
\W:除所有字母,数字,下划线以外的字符,相当于[^A-Za-z0-9_]。
\s:匹配空格(包括制表符、空格符、断行服),相当于[\t\r\n\v\f]。//s代表space
\S:匹配非空个的字符,相当于[^\t\r\n\v\f]。
\b:匹配词的边界。
\B:匹配非词边界,即在词的内部。
(6)修饰符
g修饰符:global,全局匹配,所谓全局就是记录上次匹配的位置,下次冲这个位置开始继续匹配
i修饰符:case-insensitive,忽略大小写
m修饰符:multiline,多行匹配,所谓多行匹配,就是不识别本行最后一个\n字符(如果有),即$(位置字符)不理会\n,例如
/world$/m.test('hello world\n') // true
现在来解释一下这段正则表达式
var reg = /^<(\w+)([^>]{0,})>(.*?)<\/\1>/g;
以”<“开始,\w(字母,数字,下划线)字符匹配一次或多次(组匹配1),非”>“z字符匹配0次或多次(组匹配2),匹配”>“字符,点字符匹配0次或多次并设置为非贪婪模式,匹配”<“字符,\/转义斜杠,\1表示组匹配1.至此,带有属性的元素标签就匹配成功了。
3.匹配的方法
(1)正则对象.exec(字符串),返回数组
(2)正则对象.test(字符串),返回true或false
(3)字符串.match(正则对象),返回数组
(4)字符串.search(正则对象),返回第一个满足条件的匹配结果在整个字符串中的文职,没有返回-1
(5)字符串.replace(字符串/正则对象,替换的内容),替换匹配的值
(6)字符串.split(字符串/正则对象,[返回数组的最大成员数,可选项]),返回一个有分割后的各个部分组成的数组