描述字符范围

课后整理 2020-12-10

在正则表达式语法中,方括号表示字符范围。在方括号内可以包含多个字符,表示匹配其中任意一个字符。如果多个字符的编码顺序是连续的,可以仅指定开头和结尾字符,中间字符可以省略,仅使用连字符(-)表示。如果在方括号内添加脱字符(^)前缀,还可以表示范围之外的字符。例如:

【示例1】字符范围遵循字符编码的顺序进行匹配。如果将要匹配的字符恰好在字符编码表中特定区域内,就可以使用这种方式表示。

如果匹配任意ASCII字符:

var r = /[\u0000-\u00ff]/g;

如果匹配任意双字节的汉字:

var r = /[^\u0000-\u00ff]/g;

如果要匹配任意大小写字母和数字计:

var r = /[a-zA-Z0-9]/g;

使用Unicode编码设计,匹配数字:

var r = /[\u0030-\u0039]/g;

使用下面字符模式可以匹配任意大写字母:

var r = /[\u0041-\u004A]/g;

使用下面字符模式可以匹配任意小写字母:

var r = /[\u0061-\u007A]/g;

【示例2】在字符范围内可以混用各种字符模式。

var s = "abcdez";                                       //字符串直接量 
var r = /[abce-z]/g;                                    //字符a、b、c,以及从e~z之间的任意字符 
var a = s.match(r);                                     //返回数组["a","b","c","e","z"]

【示例3】在中括号内不要有空格,否则会误解为还要匹配空格。

var r = /[0-9 ]/g;

【示例4】字符范围可以组合使用,以便设计更灵活的匹配模式。

var s = "abc4 abd6 abe3 abf1 abg7";            //字符串直接量 
var r = /ab[c-g][1-7]/g;                             //前两个字符为ab,第三个字符为从c到g, 
                                                               ////第四个字符为1~7的任意数字 
var a = s.match(r);                                    //返回数组["abc4","  abd6"," abe3"," abf1"," abg7"]

【示例5】使用反义字符范围可以匹配很多无法直接描述的字符,实现以少应多的目的。

var r = /[^0123456789]/g;

在这个正则表达式中,将会匹配除了数字以外任意的字符。反义字符类比简单字符类显得功能更加强大和实用。