var reg = /regexp/
var reg = new RegExp('regexp')
/regexp/i
/regexp/ig
),或者做爲第二個參數傳進去(new RegExp('regexp', 'ig')
)。//下面的例子演示了各類標誌的用法,以及它們是如何影響模式匹配的:
var pattern = /orange/;
console.log(pattern.test("orange")); // true
var patternIgnoreCase = /orange/i;
console.log(patternIgnoreCase.test("Orange")); // true
var patternGlobal = /orange/ig;
console.log(patternGlobal.test("Orange Juice")); // true
複製代碼
任何非正則表達式字符或操做符的字符序列,表明的都是該字符自己:
var parttern = /orange/;
咱們不多采用嚴格匹配,由於這和直接比較兩個字符串沒什麼分別。嚴格匹配有時候也 叫做簡化模式(simple pattern)。正則表達式
若是想匹配一組字符,能夠放到[]中來。例如[abc]就表示a,b,c中的任意一個字符。數組
var pattern = /[abc]/;
console.log(pattern.test('a')); //true
console.log(pattern.test('d')); //false
複製代碼
也能夠在模式開頭加一個^(脫字符)來表示不想匹配到的內容。瀏覽器
var pattern = /[^abc]/;
console.log(pattern.test('a')); //false
console.log(pattern.test('d')); //true
複製代碼
這種模式還有另外一種很重要的用法是用來指明值的範圍。若是想匹配字符或數字的某個連續 範圍,可使用下面的模式:bash
var pattern = /[0-5]/;
console.log(pattern.test(3)); //true
console.log(pattern.test(12345)); //true
console.log(pattern.test(9)); //false
console.log(pattern.test(6789)); //false
console.log(/[0123456789]/.test("This is year 2015")); //true
複製代碼
咱們能夠看到:[ , ] , ^ , $ , .等字符都是具備特殊含義的字符。那要配配它們的字面量的含義,要怎麼作?
加一個\(反斜線字符)
就行了。[ 匹配的就是一個普通的字符[, 而不是字符組的開括號。雙\\
表示一個普通的字符 \ 。函數
能夠看到兩種方法結果是一致的。查找不到的時候則返回null。學習
var strToMatch = 'Blue is your favorite color ? blue?';
var regExAt = /Blue/ig;
console.log(strToMatch.replace(regExAt, "Red"));
//輸出:Red is your favorite color ? Red?
複製代碼
或者,第二個參數接受一個函數:ui
var strToMatch = 'Blue is your favorite color ?';
var regExAt = /Blue/;
console.log(strToMatch.replace(regExAt, function(matchingText){
return 'Red';
}));
// 輸出"Red is your favorite color ?"
複製代碼
var sColor = 'sun,moon,Stars';
var reComma = /[n,s]/i;
console.log(sColor.split(reComma));
//輸出: ["", "u", "", "moo", "", "", "tar", ""]
複製代碼
var strToMatch = 'wooden bat, smelly Cat,a fat cat';
var re = /[bcf]at/gi;
var arrMatches = strToMatch.match(re);
console.log(arrMatches);
//輸出:["bat", "Cat", "fat", "cat"]
複製代碼
var strToMatch = 'i1,i2,i3,i4,i5,i6,i7,i8,i9';
var re = /i[0-5]/gi;
var arrMatches = strToMatch.match(re);
console.log(arrMatches);
//輸出:["i1", "i2", "i3", "i4", "i5"]
複製代碼
寫法 | 含義 |
---|---|
\d | 任意的單個數字字符 |
\w | 任意的單個字母或數字字符 |
\s | 任意的單個空白字符(空格、製表符、換行符等) |
\D | 任意的單個非數字字符 |
\W | 任意的單個非字母或數字字符 |
\s | 任意的單個非空白字符 |
. | 除換行符以外的任意單個字符 |
var strToMatch = '123-456-7890';
var re = /\d\d\d-\d\d\d/;
var arrMatches = strToMatch.match(re);
console.log(arrMatches);
//["123-456"]
複製代碼
寫法 | 含義 |
---|---|
? | 出現0次或1次(將模式視爲可選的) |
* | 出現0次或屢次 |
+ | 出現1次或屢次 |
{n} | 只出現n次 |
{n,m} | 出現n到m次 |
{n, } | 至少出現n次 |
{ ,n} | 出現0到n次 |
//非子串:
console.log(/cat/.test('a black cat')); //true
//子串:
console.log(/cat/.test('a blackcat')); //true
複製代碼
下面是使用了 \b
之後的例子:this
//非子串:
console.log(/\bcat/.test('a black cat')); //true
//子串:
console.log(/\bcat/.test('a blackcat')); //false
console.log(/\bcat/.test('a cataa')); //true
console.log(/\bcat\b/.test('a blackcat')); //false
console.log(/\bcat\b/.test('a cat')); //true
複製代碼
** \b 做用:** 上面的解釋仍是有點模糊,\b表示的是字符與字符之間看不見的東西(空格)。
若是想匹配cat字符串的話,須要寫成:/\bcat\b/
詳細解釋看下圖:spa
exec的用法:
exec()方法在獲取匹配信息方面頗有用,由於它會返回一個包含匹配信息的對象。exec() 返回的對象有一個index屬性,能夠告訴咱們成功匹配出如今字符串中的哪一個位置。這個功能在 很多地方都能派上用場:code
var match = /\d+/.exec("There are 100 ways to do this");
console.log(match);
// ["100"]
console.log(match.index);
// 10
複製代碼
()組合符的用法:
選擇結構可使用|(管道符)來表示。例如,/a|b/能夠匹配字符a或b,/(ab)+|(cd)+/ 能夠匹配一個或多個ab或cd。
咱們常常須要確保模式在字符串的首部或尾部進行匹配。當脫字符(^)用做正則表達式的 第一個字符的時候,能夠將匹配過程鎖定在字符串的開頭,所以,/^test/只可以匹配出如今待 匹配字符串起始位置上的test子串。與此相似,美圓符號(/。
^和/。
在字符串String使用replace()方法時,可使用特殊的字符序列$1,$2...來表示對應的分組。
var orig = "1234 5678";
var re = /(\d{4}) (\d{4})/;
var modifiedStr = orig.replace(re, "$2 $1");
console.log(modifiedStr); // 輸出"5678 1234"
複製代碼
例如,模式\d+可以匹配一個或多個數字。若是字符串是123的話,貪婪匹配能夠匹配到一、 12和123。貪婪模式h.+1能夠匹配字符串hello中的hell——這是可以匹配的最長的字符串。 由於\d+是貪婪匹配,因此它會盡量多地匹配數字,故最後的匹配結果就是123。
與貪婪限定符相反,惰性限定符則是儘量少地匹配字符。能夠在正則表達式後面加上問號 (?),使其成爲惰性匹配。惰性模式h.?l能夠匹配字符串hello中的hel—— 這是可以匹配到的最短的字符串。
模式\w*?X能夠匹配到0個或多個單詞以及一個X。可是*
後的?表示應該儘量少地匹配字 符。對於字符串abcXXX,匹配結果能夠是abcX、abcXX或abcXXX,那究竟應該匹配哪個呢? 由於*?是惰性模式,因此應該儘量少地匹配,所以最後的匹配結果是abcX。
刪除字符串首尾多餘的空白字符是一個極其常見的用法。直到最近,String對象自己都沒有 trim()方法,一些JavaScript庫爲沒有String.trim()方法的舊瀏覽器提供了字符串修剪功能。 最經常使用的方法以下所示:
function trim(str) {
return (str || "").replace(/^\s+|\s+$/g,"");
}
console.log("--"+trim(" test ")+"--");
//"--test--"
//若是咱們想把重複的空白字符替換成單個呢?
re=/\s+/g;
console.log('There are a lot of spaces'.replace(re,' '));
//"There are a lot of spaces"
複製代碼
在上面的代碼片斷中,咱們嘗試匹配一個或多個空格字符序列,而後將其替換成單個空格。 如你所見,正則表達式就像是JavaScript兵器庫中的一把瑞士軍刀。從長遠來看,細心學習、 充分實踐,將爲你帶來豐厚的長期回報。