预定义模式指的是某些常见模式的简写方式。
* `\d`匹配0-9之间的任一数字,相当于`[0-9]`。
* `\D`匹配所有0-9以外的字符,相当于`[^0-9]`。
* `\w`匹配任意的字母、数字和下划线,相当于`[A-Za-z0-9_]`。
* `\W`除所有字母、数字和下划线以外的字符,相当于`[^A-Za-z0-9_]`。
* `\s`匹配空格(包括换行符、制表符、空格符等),相等于`[ \t\r\n\v\f]`。
* `\S`匹配非空格的字符,相当于`[^ \t\r\n\v\f]`。
* `\b`匹配词的边界。
* `\B`匹配非词边界,即在词的内部。
下面是一些例子。
~~~
// \s 的例子
/\s\w*/.exec('hello world') // [" world"]
// \b 的例子
/\bworld/.test('hello world') // true
/\bworld/.test('hello-world') // true
/\bworld/.test('helloworld') // false
// \B 的例子
/\Bworld/.test('hello-world') // false
/\Bworld/.test('helloworld') // true
~~~
上面代码中,`\s`表示空格,所以匹配结果会包括空格。`\b`表示词的边界,所以`world`的词首必须独立(词尾是否独立未指定),才会匹配。同理,`\B`表示非词的边界,只有`world`的词首不独立,才会匹配。
通常,正则表达式遇到换行符(`\n`)就会停止匹配。
~~~
var html = "<b>Hello</b>\n<i>world!</i>";
/.*/.exec(html)[0]
// "<b>Hello</b>"
~~~
上面代码中,字符串`html`包含一个换行符,结果点字符(`.`)不匹配换行符,导致匹配结果可能不符合原意。这时使用`\s`字符类,就能包括换行符。
~~~
var html = "<b>Hello</b>\n<i>world!</i>";
/[\S\s]*/.exec(html)[0]
// "<b>Hello</b>\n<i>world!</i>"
~~~
上面代码中,`[\S\s]`指代一切字符。
- 第一章:变量与作用域
- 第一节:变量
- 第二节:执行环境及作用域
- 第三节:JS 解析机制
- 第四节:垃圾收集
- 第二章:深入函数
- 第一节:概述
- 第二节:函数声明
- 第三节:函数调用
- 第四节:函数参数
- 第五节:函数返回值
- 第三章:面向对象
- 第一节:概述
- 第二节:对象声明
- 第三节:this 关键字
- 第四节:对象遍历
- 第五节:对象继承
- 第六节:模块
- 第四章:正则表达式
- 第一节:概述
- 第二节:实例属性
- 第三节:实例方法
- 第一课时:测试
- 第二课时:执行
- 第四节:匹配规则
- 第一课时:字面量字符和元字符
- 第二课时:转义符
- 第三课时:特殊字符
- 第四课时:字符类
- 第五课时:预定义模式
- 第六课时:重复类
- 第七课时:量词符
- 第八课时:贪婪模式
- 第九课时:修饰符
- 第十课时:组匹配
- 第五节:字符串的实例方法
- 第一课时:匹配
- 第二课时:搜索
- 第三课时:替换
- 第四课时:分割