描述字符

课后整理 2020-12-10

根据正则表达式语法规则,大部分字符仅能够描述自身,这些字符称为普通字符,如所有的字母、数字等。

元字符就是拥有特定功能的特殊字符,大部分需要加反斜杠进行标识,以便与普通字符进行区别,而少数元字符,需要加反斜杠以便转义为普通字符使用。JavaScript正则表达式支持的元字符说明如下。

表示字符的方法有多种,除了可以直接使用字符本身外,还可以使用ASCII编码或者Unicode编码来表示。

【示例1】下面使用ASCII编码定义正则表达式直接量。

var r = /\x61/;                                           //以ASCII编码匹配字母a
var s = "JavaScript";
var a = s.match(r);                                     //匹配第一个字符a

由于字母a的ASCII编码为97,被转换为十六进制数值后为61,因此如果要匹配字符a,就应该在前面添加“\x”前缀,以提示它为ASCII编码。

【示例2】除了十六进制外,还可以直接使用八进制数值表示字符。

var r = /\141/;                                           //141是字母a的ASCII编码的八进制值 
var s = "JavaScript";
var a = s.match(r);                                     //即匹配第1个字符a

使用十六进制需要添加“\x”前缀,主要是避免语义混淆,但是八进制不需要添加前缀。

【示例3】ASCII编码只能够匹配有限的单字节字符,使用Unicode编码可以表示双字节字符。Unicode编码方式:“\u”前缀加上4位十六进制值。

var r = /\u0061/;                                        //以Unicode编码匹配字母a
var s = "JavaScript";                                  //字符串直接量 
var a = s.match(r);                                     //匹配第一个字符a

【注意】

在RegExp()构造函数中使用元字符时,应使用双斜杠。

var r = new RegExp("\\u0061");

RegExp()构造函数的参数只接受字符串,而不是字符模式。在字符串中,任何字符加反斜杠还表示字符本身,如字符串“\u”就被解释为字符u本身,所以对于“\u0061”字符串来说,在转换为字符模式时,就被解释为“u0061”,而不是“\u0061”,此时反斜杠就失去转义功能。解决方法:在字符u前面加双反斜杠。