## 12.2 用于模式匹配的String方法
String支持4种使用正则表达式的方法。
|||
|||
| search() | 按照给定的正则表达式进行搜索,返回一个整数,表示第一个与之匹配的字符串的起始位置,如果找不到匹配的子串,将返回-1。|
| match() | 返回一个数组,成员是所有匹配的子字符串。|
| replace() | 按照给定的正则表达式进行替换,返回替换后的字符串。|
| split() | 按照给定规则进行字符串分割,返回一个数组,包含分割后的各个成员。|
**1.search()**
按照给定的正则表达式进行搜索,返回一个整数,表示第一个与之匹配的字符串的起始位置,如果找不到匹配的子串,将返回-1。
~~~
"javascript".search(/script/i);
~~~
上面的代码的返回值为4
如果search()的参数不是正则表达式,则首先会通过RegExp构造函数将它转换成正则表达式,search()方法不支持全局检索,因为它忽略正则表达式参数中的修饰符g。
**2.match()**
match()方法的唯一参数是一个正则表达式,返回的是一个由匹配结果组成的数组。如果该正则表达式设置了修饰符g,则返回的数组包含字符串中的所有匹配结果。
'1 plus 2 equals 3'.match(/\d+/g) //返回["1","2","3"]
返回来的数组还带有另外两个属性:index和input,分别表示包含发生匹配的字符位置和引用的正在检索的字符串。
**3.replace()**
replace()方法用以执行检索与替换操作。其中第一个参数是一个正则表达式,第二个参数是要进行替换的字符串。
如果replace()的第一个参数是字符串而不是正则表达式,则replace()将直接搜索这个字符串,而不会像search()一样首先通过RegExp()将它转换为正则表达式。
replace方法的第二个参数可以使用美元符号$,用来指代所替换的内容。
$& 指代匹配的子字符串。
~~~
$` 指代匹配结果前面的文本。
$' 指代匹配结果后面的文本。
$n 指代匹配成功的第n组内容,n是从1开始的自然数。
$$ 指代美元符号$。
~~~
比如:
~~~
'hello world'.replace(/(\w+)\s(\w+)/, '$2 $1')
// "world hello"
~~~
replace方法的第二个参数还可以是一个函数,将每一个匹配内容替换为函数返回值。
~~~
'abca'.replace(/a/g,function(match){
return match.toUpperCase();
});
// "AbcA"
~~~
replace()方法的第二个参数可以接受多个参数。第一个参数是捕捉到的内容,第二个参数是捕捉到的组匹配(有多少个组匹配,就有多少个对应的参数)。
**4.split()**
split()方法用以将调用它的字符串拆分为一个子串组成的数组。
~~~
'123,456,789'.split(',') //返回["123","456","789"]
~~~
split()方法的参数也可以是一个正则表达式。
## 12.3 RegExp对象
RegExp()构造函数带有两个字符串参数,第二个参数是可选的,它指定正则表达式的修饰符(可传入修饰符g、i、m或者它们的组合);第一个参数包含正则表达式的主体部分,也就是正则表达式直接量中两条斜线之间的文本。
~~~
var regexp = new RegExp('\\d{5}','g')
~~~
上面的代码表示会全局的查找5个数字。
### 12.3.1RegExp对象的属性
每个RegExp对象都包含5个属性:
|||
||||
| source | 只读字符串,包含正则表达式的文本|
| global | 只读布尔值,用以说明这个正则表达式是否带有修饰符g|
| ignoreCase | 只读布尔值,用以说明正则表达式是否带有修饰符i|
| multiline | 只读布尔值,用以说明正则表达式是否带有修饰符m|
| lastIndex | 可读写的整数,如果匹配模式带有g修饰符,这个属性存储在整个字符串中下一次检索的开始位置。|
### 12.3.2 RegExp的方法
RegExp对象定义了两个用于执行模式匹配操作的方法。
**1.exec()**
正则对象的exec方法,可以返回匹配结果。如果发现匹配,就返回一个数组,成员是每一个匹配成功的子字符串,否则返回null。
~~~
/a|b|c/.exec('abc') // ["a"]
/a|b|c/.exec('qwe') // null
~~~
**2.test()**
正则对象的test方法返回一个布尔值,表示当前模式是否能匹配参数字符串。
~~~
var s = /a/g;
var a = 'baba';
s.lastIndex //0
s.test(a); //true
s.lastIndex; //2
s.test(a); //true
~~~
注意:如果正则表达式带有g修饰符,则每一次test方法都从上一次结束的位置开始向后匹配,也可以通过正则对象的lastIndex属性指定开始搜索的位置。
- 前言
- 第一章 JavaScript简介
- 第三章 基本概念
- 3.1-3.3 语法、关键字和变量
- 3.4 数据类型
- 3.5-3.6 操作符、流控制语句(暂略)
- 3.7函数
- 第四章 变量的值、作用域与内存问题
- 第五章 引用类型
- 5.1 Object类型
- 5.2 Array类型
- 5.3 Date类型
- 5.4 基本包装类型
- 5.5 单体内置对象
- 第六章 面向对象的程序设计
- 6.1 理解对象
- 6.2 创建对象
- 6.3 继承
- 第七章 函数
- 7.1 函数概述
- 7.2 闭包
- 7.3 私有变量
- 第八章 BOM
- 8.1 window对象
- 8.2 location对象
- 8.3 navigator、screen与history对象
- 第九章 DOM
- 9.1 节点层次
- 9.2 DOM操作技术
- 9.3 DOM扩展
- 9.4 DOM2和DOM3
- 第十章 事件
- 10.1 事件流
- 10.2 事件处理程序
- 10.3 事件对象
- 10.4 事件类型
- 第十一章 JSON
- 11.1-11.2 语法与序列化选项
- 第十二章 正则表达式
- 12.1 创建正则表达式
- 12.2-12.3 模式匹配与RegExp对象
- 第十三章 Ajax
- 13.1 XMLHttpRequest对象
- 你不知道的JavaScript
- 一、作用域与闭包
- 1.1 作用域
- 1.2 词法作用域
- 1.3 函数作用域与块作用域
- 1.4 提升
- 1.5 作用域闭包
- 二、this与对象原型
- 2.1 关于this
- 2.2 全面解析this
- 2.3 对象
- 2.4 混合对象“类”
- 2.5 原型
- 2.6 行为委托
- 三、类型与语法
- 3.1 类型
- 3.2 值
- 3.3 原生函数