## 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 原生函數