大部分字符在正则表达式中,就是字面的含义,比如`/a/`匹配`a`,`/b/`匹配`b`。如果在正则表达式之中,某个字符只表示它字面的含义(就像前面的`a`和`b`),那么它们就叫做“字面量字符”(literal characters)。
~~~
/dog/.test('old dog') // true
~~~
上面代码中正则表达式的`dog`,就是字面量字符,所以`/dog/`匹配`old dog`,因为它就表示`d`、`o`、`g`三个字母连在一起。
除了字面量字符以外,还有一部分字符有特殊含义,不代表字面的意思。它们叫做“元字符”(metacharacters),主要有以下几个。
**(1)点字符(.)**
点字符(`.`)匹配除回车(`\r`)、换行(`\n`) 、行分隔符(`\u2028`)和段分隔符(`\u2029`)以外的所有字符。注意,对于码点大于`0xFFFF`字符,点字符不能正确匹配,会认为这是两个字符。
~~~
/c.t/
~~~
上面代码中,`c.t`匹配`c`和`t`之间包含任意一个字符的情况,只要这三个字符在同一行,比如`cat`、`c2t`、`c-t`等等,但是不匹配`coot`。
**(2)位置字符**
位置字符用来提示字符所处的位置,主要有两个字符。
* `^`表示字符串的开始位置
* `$`表示字符串的结束位置
~~~
// test必须出现在开始位置
/^test/.test('test123') // true
// test必须出现在结束位置
/test$/.test('new test') // true
// 从开始位置到结束位置只有test
/^test$/.test('test') // true
/^test$/.test('test test') // false
~~~
**(3)选择符(`|`)**
竖线符号(`|`)在正则表达式中表示“或关系”(OR),即`cat|dog`表示匹配`cat`或`dog`。
~~~
/11|22/.test('911') // true
~~~
上面代码中,正则表达式指定必须匹配`11`或`22`。
多个选择符可以联合使用。
~~~
// 匹配fred、barney、betty之中的一个
/fred|barney|betty/
~~~
选择符会包括它前后的多个字符,比如`/ab|cd/`指的是匹配`ab`或者`cd`,而不是指匹配`b`或者`c`。如果想修改这个行为,可以使用圆括号。
~~~
/a( |\t)b/.test('a\tb') // true
~~~
上面代码指的是,`a`和`b`之间有一个空格或者一个制表符。
其他的元字符还包括`\`、`\*`、`+`、`?`、`()`、`[]`、`{}`等。
- 第一章:变量与作用域
- 第一节:变量
- 第二节:执行环境及作用域
- 第三节:JS 解析机制
- 第四节:垃圾收集
- 第二章:深入函数
- 第一节:概述
- 第二节:函数声明
- 第三节:函数调用
- 第四节:函数参数
- 第五节:函数返回值
- 第三章:面向对象
- 第一节:概述
- 第二节:对象声明
- 第三节:this 关键字
- 第四节:对象遍历
- 第五节:对象继承
- 第六节:模块
- 第四章:正则表达式
- 第一节:概述
- 第二节:实例属性
- 第三节:实例方法
- 第一课时:测试
- 第二课时:执行
- 第四节:匹配规则
- 第一课时:字面量字符和元字符
- 第二课时:转义符
- 第三课时:特殊字符
- 第四课时:字符类
- 第五课时:预定义模式
- 第六课时:重复类
- 第七课时:量词符
- 第八课时:贪婪模式
- 第九课时:修饰符
- 第十课时:组匹配
- 第五节:字符串的实例方法
- 第一课时:匹配
- 第二课时:搜索
- 第三课时:替换
- 第四课时:分割