A:因为字符类除了能表示选择,还包括另外两种字符,脱字符和连字符,这两种字符又有新的功,可以将字符类理解成选择符的一种超集 。
- 脱字符(^)
var reg=/^123/; //位置字符reg.test("1234"); //truevar reg=/[^123]/; //脱字符reg.test("123"); //falsereg.test("4") //true
- 连字符(-)
var reg=/0-9/; //表示匹配字符串"0-9"reg.test("0") //falsereg.test("0-9")//truevar reg=/[0-9]/;reg.test("0") //false==注意:虽然连字符用起来十分简便,但是一定要避免过度使用连字符,因为连字符往往设定的是一个比较大的范围,如果不注意可能会匹配到意料之外的一些字符 。比如:[A-z],表面上它是要匹配到A-Z和a-z这52个字符,但是实际上在ASCII编码中,在Z和a之间还有很多其他字符,所以可能机会出现意料之外的匹配效果 。
var reg=/[A-z]/;reg.test('['); //true分析:因为"["字符在Z和a之间,所以也能被匹配到 。
预定义模式
预定义模式是指某些常见模式的简写方式,可以理解成是内置的正则表达 。
- d 匹配0-9之间的任一数字,相当于[0-9] 。
- D 匹配所有0-9以外的字符,相当于[^0-9] 。
- w 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_] 。
- W 除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9_] 。
- s 匹配空格(包括换行符、制表符、空格符等),相等于[ trnvf] 。
- S 匹配非空格的字符,相当于[^ trnvf] 。
- b 匹配词的边界 。
- B 匹配非词边界,即在词的内部 。
模式的精确匹配次数,使用大括号({})表示 。{n}表示恰好重复n次,{n,}表示至少重复n次,{n,m}表示重复不少于n次,不多于m次,默认匹配的是单个字符,若想要重复字符串,可以使用括号 。
var reg=/12{2,5}3/; //默认表示匹配单个字符"2"的次数为2-5次reg.test("1223") //true reg.test("12123") //falsevar reg=/(12){2,5}3/; //表示匹配字符串"12"的次数为2-5次reg.test("1223") //false reg.test("12123") //true量词符
量词符是内置用来设定某个模式出现的次数的,默认也是匹配单个字符的次数 。
- ? 问号表示某个模式出现0次或1次,等同于{0, 1} 。
- * 星号表示某个模式出现0次或多次,等同于{0,} 。
- + 加号表示某个模式出现1次或多次,等同于{1,} 。
- 贪婪模式(默认):即最大可能匹配,匹配直到下一个字符不满足匹配规则为止,上面说的三个量词符,默认模式都为贪婪模式 。
- 非贪婪模式:即最小可能匹配,匹配到一个满足匹配规则的字符就停止,将贪婪模式改为非贪婪模式只需要在量词符后面加一个问号 。
- *?:表示某个模式出现0次或多次,匹配时采用非贪婪模式 。
- +?:表示某个模式出现1次或多次,匹配时采用非贪婪模式 。
修饰符(modifier)表示模式的附加规则,放在正则模式的最尾部,有g,i,m三种修饰符 。
修饰符可以单个使用,也可以多个一起使用 。
// 单个修饰符var reg = /test/i;// 多个修饰符var reg = /test/ig;
- g修饰符
var s = 'aaa';var reg=/a+?/;s.match(reg); //["a"]var s = 'aaa';var reg=/a+?/g;s.match(reg); //["a","a","a"]
- i修饰符
var s = 'Aaa';var reg=/a/;s.match(reg); //["a"]var s = 'Aaa';var reg=/a/i;s.match(reg); //["A"]
- m修饰符
推荐阅读
- TCP粘拆包详解与Netty代码示例
- 「一图详解」收藏!一份关于小规模纳税人减征增值税的学习笔记
- 详解MySQL兼容性show_compatibility_56参数
- 详解Https是如何确保安全的
- 详解ORACLE数据字典--V$SQL_WORKAREA_ACTIVE
- 详解汽车散热系统,夏天拒绝发动机高温
- 详解唐诗中的那些茶文化
- 地下室防水施工步骤详解
- 图文详解HDFS工作机制
- MIUI12桌面设置详解,新手必会的八项小技巧
