建立正則表達式
建立正則表達式和建立字符串相似,建立正則表達式提供了兩種方法,一種是採用new
運算符,另外一個是採用字面量方式。正則表達式
- var box = new RegExp('box'); //第一個參數字符串
- var box = new RegExp('box', 'ig'); //第二個參數可選模式修飾符
模式修飾符的可選參數數組
- var box = /box/; //直接用兩個反斜槓
- var box = /box/ig; //在第二個斜槓後面加上模式修飾符
2.測試正則表達式
RegExp 對象包含兩個方法:test()和exec(),功能基本類似,用於測試字符串匹配。test()
方法在字符串中查找是否存在指定的正則表達式並返回布爾值,若是存在則返回true,不存
在則返回false。exec()方法也用於在字符串中查找指定正則表達式,若是exec()方法執行成
功,則返回包含該查找字符串的相關信息數組。若是執行失敗,則返回null。瀏覽器
- /*使用new 運算符的test 方法示例*/
- var pattern = new RegExp('box', 'i'); //建立正則模式,不區分大小寫
- var str = 'This is a Box!'; //建立要比對的字符串
- alert(pattern.test(str)); //經過test()方法驗證是否匹配
- /*使用字面量方式的test 方法示例*/
- var pattern = /box/i; //建立正則模式,不區分大小寫
- var str = 'This is a Box!';
- alert(pattern.test(str));
- /*使用一條語句實現正則匹配*/
- alert(/box/i.test('This is a Box!')); //模式和字符串替換掉了兩個變量
- /*使用exec 返回匹配數組*/
- var pattern = /box/i;
- var str = 'This is a Box!';
- alert(pattern.exec(str)); //匹配了返回數組,不然返回null
3.使用字符串的正則表達式方法
除了test()和exec()方法,String 對象也提供了4 個使用正則表達式的方法。ide
- /*使用match 方法獲取獲取匹配數組*/
- var pattern = /box/ig; //全局搜索
- var str = 'This is a Box!,That is a Box too';
- alert(str.match(pattern)); //匹配到兩個Box,Box
- alert(str.match(pattern).length); //獲取數組的長度
PS:由於search 方法查找到即返回,也就是說無需g 全局
- /*使用search 來查找匹配數據*/
- var pattern = /box/ig;
- var str = 'This is a Box!,That is a Box too';
- alert(str.search(pattern)); //查找到返回位置,不然返回-1
- /*使用replace 替換匹配到的數據*/
- var pattern = /box/ig;
- var str = 'This is a Box!,That is a Box too';
- alert(str.replace(pattern, 'Tom')); //將Box 替換成了Tom
- /*使用split 拆分紅字符串數組*/
- var pattern = / /ig;
- var str = 'This is a Box!,That is a Box too';
- alert(str.split(pattern)); //將空格拆開分組成數組
RegExp對象的靜態屬性測試
屬性 | 短名 | 含義 |
input | $_ | 當前被匹配的字符串 |
lastMatch | $& | 最後一個匹配字符串 |
lastParen | $+ | 最後一對圓括號內的匹配子串 |
leftContext | $` | 最後一次匹配前的子串 |
multiline | $* | 用於指定是否全部的表達式都用於多行的布爾值 |
rightContext | $' | 在上次匹配以後的子串 |
PS:Opera 不支持input、lastMatch、lastParen 和multiline 屬性。IE 不支持multiline 屬
- /*使用靜態屬性*/
- var pattern = /(g)oogle/;
- var str = 'This is google!';
- pattern.test(str); //執行一下
- alert(RegExp.input); //This is google!
- alert(RegExp.leftContext); //This is
- alert(RegExp.rightContext); //!
- alert(RegExp.lastMatch); //google
- alert(RegExp.lastParen); //g
- alert(RegExp.multiline); //false
性。
全部的屬性可使用短名來操做
RegExp.input 能夠改寫成RegExp['$_'],依次類推。但RegExp.input 比較特殊,它還可
以寫成RegExp.$_。
PS:以上基本沒什麼用。而且lastIndex 在獲取下次匹配位置上IE 和其餘瀏覽器有誤差,主要表如今非全局匹配上。lastIndex 還支持手動設置,直接賦值操做。
- /*使用實例屬性*/
- var pattern = /google/ig;
- alert(pattern.global); //true,是否全局了
- alert(pattern.ignoreCase); //true,是否忽略大小寫
- alert(pattern.multiline); //false,是否支持換行
- alert(pattern.lastIndex); //0,下次的匹配位置
- alert(pattern.source); //google,正則表達式的源字符串
- var pattern = /google/g;
- var str = 'google google google';
- pattern.test(str); //google,匹配第一次
- alert(pattern.lastIndex); //6,第二次匹配的位