JavaScript中的正則表達式

模式以及支持標誌

var expression = / pattern / flags; javascript

var 表達式 = / 模式 / 標誌;html

正則表達式的匹配模式支持下列3個標誌。java

修飾符 描述
g(global) 全局匹配,應用全部字符串,而非在發現第一個匹配後中止
i(ignoreCase) 不區分大小寫,匹配時忽略模式與字符串的大小寫
m(multiline) 多行匹配,到達一行文本末尾,繼續查找下一行

兩種建立方式

字面量定義和構造函數定義

var expression = /[bc]at/i;//字面量定義 
var expression = new RegExp("[bc]at","i");//構造函數定義複製代碼

RegExp構造函數接收兩個參數:RegExp("要匹配的字符串模式","可選的標誌字符串") 注意: 傳遞給RegExp構造函數的兩個參數必須都是字符串git

區別:

因爲 RegExp 構造函數的模式參數是字符串,因此在某些狀況下要對字符進行雙重轉義github

| 字面量模式 | 構造函數模式 | | :-----------:| :------------:| 正則表達式

RegExp實例方法

test()

接收:一個字符串參數。express

返回值:返回一個布爾值。數組

當模式與改參數匹配的狀況下返回true,不然爲false。函數

var example = "000-00-0000";
var pattern = /\d{3}-\d{2}-\d{4}/;
if (pattern.test(example)){    
    alert("The pattern was matched.");
}複製代碼

exec()

exec() 接受一個參數,即要應用模式的字符串,而後返回包含第一個匹配項信息的數組;在沒有匹配項的狀況下返回 null 。返回的數組雖然是 Array 的實例,但包含兩個額外的屬性: index 和 input 。ui

  • index 表示匹配項在字符串中的位置。

  • input 表示應用正則表達式的字符串。

match()

match()方法能夠以相似數組的形式返回第一個與表達式匹配的字符

例子:

var reg = /ab/;    var str = "abababababab";    console.log(str.match(reg));複製代碼

var reg = /ab/g;    
var str = "abababababab";    
console.log(str.match(reg));複製代碼

方括號

  1. [........],查找方括號中的任意字符

好比: [abc]、[0-9]、[a-z]、[A-Z]、[A-z]、[adgk]

  1. [ ^......],查找方括號中之外的任意字符,^表示,注意這個^是要在[]裏面的才表示

好比: abcadpk

  1. (......|......|......) ,查找圓括號裏面中的指定的其中一個,|表示

好比: (abc|bcd|def)

元字符

字符 等價類 含義
. [^\r\n] 除了回車符和換行符以外的全部字符
\d [0-9] 數字字符
\D [^0-9] 非數字字符
\s [\t\n\x0B\f\r] 空白字符
\S [^\t\n\x0B\f\r] 非空白字符
\w [a-zA-Z_0-9] 單詞字符(字母、數字下劃線)
\W [^a-zA-Z_0-9] 非單詞字符

定位符

字符 含義
^ 匹配字符串的開頭
$ 匹配字符串的結尾
\b 匹配一個單詞的邊界
\B 與\b相反,匹配一個非單詞邊界

用例:

量詞

字符 含義
n+ 匹配任何包含至少一個 n 的字符串
n* 匹配任何包含零個或多個 n 的字符串
n? 匹配任何包含零個或一個 n 的字符串
n{x} 匹配包含 x 個 n 的序列的字符串
n{x,y} 匹配包含 x 至 y 個 n 的序列的字符串
n{x,} 匹配包含至少 x 個 n 的序列的字符串
?=n 匹配任何其後緊接指定字符串 n 的字符串
?!n 匹配任何其後沒有緊接指定字符串 n 的字符串

html特殊字符:

練習題

1. 將the-first-name轉換成theFirstName?

var reg = /-(\w)/g;
        var str = "the-first-name";
       	var newStr = str.replace(reg,function($,$1){
       		return $1.toUpperCase();
       	});
       	console.log(newStr);    複製代碼

2. 對數組去重?

var str = "aaaaaaaaaaabbbbbbbbbcccccccc";
        var reg = /(\w)\1*/g;
        console.log(str.replace(reg,"$1"));複製代碼

3. 請將aaaaaabbbbbb的字符串調換成bbbbbbaaaaaa的形式?

var reg = /(\w{6})(\w{6})/g;
        var str = "aaaaaabbbbbb";
        console.log(str.replace(reg,"$2$1"));複製代碼

4. 用.將str字符串從後向前3位3位截斷?

var reg = /(?=(\B)(\d{3})+$)/g;
var str = "1000000000";
console.log(str.replace(reg,"."));複製代碼

5. 如何獲取一個字符串中的數字字符,並以數組形式輸出,如dgfhfgh234bhku259fakhdy678fh輸出的是[234,259,678];

var str = "dgfhfgh234bhku259fakhdy678fh";
var newArr = str.match(/\d+/g).map(function(x){
		return +x;
	})
console.log(newArr);複製代碼


更多文章請轉移:github.com/wangyicong

相關文章
相關標籤/搜索