JavaScript正則表達式的學習
正則表達式的應用已經相當廣泛,之前也多次接觸,但是並未真正的系統的學習過,借此機會,好好整理了一下,並加入了es6中關於正則表達式的新語法,希望對大家有點幫助.
一、首先,了解正則表達式的含義,表示方法
正則表達式又稱規則表達式,(Regular Expression,在代碼中常簡寫為regex、regexp或RE),對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。正則表通常被用來檢索、替換那些符合某個模式(規則)的文本。
正則表達式的表示方法有兩種。
a.直接量表示.
/pattern/attributes; ///正則表達式主體/修飾符(可選)
b.RegExp對象表示。在 JavaScript 中,RegExp 對象是一個預定義了屬性和方法的正則表達式對象。
new RegExp(pattern,attributes); // 創建RegExp對象(正則表達式主體,修飾符(可選))
表達式主體。表達式主體(pattern)是一個字符串,指定了正則表達式的模式。
修飾符。 修飾符(attributes)是一個可選的參數,包含屬性 g(全局匹配)、i(不區分大小寫匹配)、m(多行匹配),es6中又加入了y(粘連sticky)修飾符,y修飾符跟g類似,也是全局匹配,後一次匹配都從上一次匹配成功的下一個位置開始,不同在於g修飾符只要剩余位置中存在匹配就行,但是y修飾符必須從剩余的第一個位置開始。
二、正則表達式中的字符。
1.普通字符。
字母,數字,漢字,下劃線及一些沒有特殊定義的標點符號登大多數字符都屬於普通字符,正則中的普通字符,在匹配字符串的時候,匹配與之相同的字符即可~ 比如如下代碼:
var str = "abcde"; console.log(str.match(/a/)); // ["a", index: 0, input: "abcde"]
如上代碼,字符串abcde匹配a的時候,匹配成功,索引位置從0開始。
2.元字符。
元字符 | 描述 |
. | 查找任意的單個字符,除換行符外 |
\w | 任意一個字母或數字或下劃線,A_Za_Z0_9,_中任意一個 |
\W | 查找非單詞的字符,等價於[^A_Za_z0_9_] |
\d | 匹配一個數字字符,等價於[0-9] |
\D | 匹配一個非數字字符,等價於[^0-9] |
\s | 匹配任何空白字符,包括空格,制表符,換行符等等。等價於[\f\n\r\t\v] |
\S | 匹配任何非空白字符,等價於[^\f\n\r\t\v] |
\b |
匹配一個單詞邊界,也就是指單詞和空格間的位置,比如’er\b’可以匹配”never”中 的”er”,但是不能匹配”verb”中的”er” |
\B | 匹配非單詞邊界,’er\B’能匹配’verb’中的’er’,但不能匹配’never’中的’er’ |
\0 |
查找NUL字符。 |
\n | 匹配一個換行符 |
\f | 匹配一個換頁符 |
\r | 匹配一個回車符 |
\t | 匹配一個制表符 |
\v | 匹配一個垂直制表符 |
\xxx | 查找一個以八進制數xxx規定的字符 |
\xdd | 查找以16進制數dd規定的字符 |
\uxxxx | 查找以16進制數的xxxx規定的Unicode字符。 |
3.轉義字符。需要轉義的特殊字符前面加 \
三、正則中[]、{}、()的含義
1. []:方括號包含一系列字符,能夠匹配其中任意一個字符, 如
[a-z]: 查找從小寫a到z中的任意一個字符;
[^a-z]: 查找除a到z之外的任意一個字符;
表達式[bcd][bcd] 匹配 "abcde"時候,匹配成功,內容是bc,匹配到的位置開始於1,結束與3;如下代碼:
var str = "abcde"; console.log(str.match(/[bcd][bcd]/)); // ["bc", index: 1, input: "abcde"]
2.{}: { 標記限定符開始的地方, n{x} 匹配包含x個的n的序列字符串.
3. (): 在被修飾匹配次數的時候,括號中的表達式可以作為整體被修飾。取匹配結果的時候,括號中的表達式匹配到的內容可以被單獨得到。
四、量詞
n+ |
匹配任何至少包含一個n的字符串 |
n* |
匹配零個或者多個n的字符串 |
n? |
匹配零個或者1個n的字符串 |
n{x} |
匹配包含x個n的序列字符串 |
n{x,y} |
匹配至少x個,最多y個n的字符串 |
n{x,} |
匹配至少x個的字符串 |
n$ |
匹配以n結尾的字符串 |
^n |
匹配以n開頭的字符串 |
?=n |
匹配其後緊接指定的n字符串 |
?!n |
匹配其後沒有緊接指定的n字符串 |
五、字符串的正則方法
a. match()方法;該方法用於在字符串內檢索指定的值,或找到一個或者多個正則表達式的匹配。
stringObject.match(searchValue)
stringObject.match(regexp)
searchValue 需要檢索字符串的值;regexp: 需要匹配模式的RegExp對象。返回值中存放匹配成功的數組; 它可以全局匹配模式,全局匹配的話,它返回的是一個數組。如果沒有找到任何的一個匹配,那麽它將返回的是null;返回的數組內有三個元素,第一個元素的存放的是匹配的文本,還有二個對象屬性;index屬性表明的是匹配文本的起始字符在stringObject中的位置;input屬性聲明的是對stringObject對象的引用.
var str = "welcome to China"; console.log(str.match("come")); // [0:"come", index: 3, input: "welcome to China"] console.log(str.match("Come")); // null console.log(str.match(/come/)); // [0:"come", index: 3, input: "welcome to China"]
b. replace()方法:該方法用於在字符串中使用一些字符替換另一些字符,或者替換一個與正則表達式匹配的子字符串;
stringObject.replace(需要被替換的字符串或RegExp對象,用來替換的文本或函數);
返回替換後的新字符串
註意:字符串的stringObject的replace()方法執行的是查找和替換操作,替換的模式有2種,既可以是字符串,也可以是正則匹配模式,如果是正則匹配模式的話,那麽它可以加修飾符g,代表全局替換,否則的話,它只替換第一個匹配的字符串。
var str = "welcome to China"; var s1 = str.replace("we","a"); console.log(s1);// alcome to China var s2 = str.replace(/e/,"b"); console.log(s2); //wblcome to China var s3 = str.replace(/o/g,‘x‘); console.log(s3); //welcxme tx China
c. search(). 該方法用於檢索字符串中指定的子字符串,或檢索與正則表達式相匹配的字符串。
stringObject.search(要檢索的字符串或RegExp對象);
返回值是stringObject中第一個與regexp對象相匹配的子串的起 始位置。如果沒有找到任何匹配的子串,則返回-1;search()方法不執行全局匹配,它將忽略標誌g,同時它也沒有regexp對象的lastIndex的屬性,且總是從字符串開始位置進行查找,總是返回的是stringObject匹配的第一個位置。
var str = "welcome to China,we are family"; console.log(str.search("we")); // 0
d. split(). 該方法把一個字符串分割成字符串數組。
stringObject.split(separator,howmany);
separator[必填項],字符串或正則表達式,該參數指定的地方分割stringObject; howmany[可選] 該參數指定返回的數組的最大長度,如果設置了該參數,返回的子字符串不會多於這個參數指定的數組。如果沒有設置該參數的話,整個字符串都會被分割,不考慮他的長度。返回值是一個字符串數組。該數組通過在separator指定的邊界處將字符串stringObject分割成子字符串。
var str = "welcome to China,we are family"; console.log(str.split("e")); // ["w", "lcom", " to China,w", " ar", " family"] console.log(str.split("e",3)); // ["w", "lcom", " to China,w"]
六、RegExp對象方法
1. test()方法:該方法用於檢測一個字符串是否匹配某個模式。
RegExpObject.test(需要檢測的字符串); //返回true or false
1 var str = "welcome to China,we are family"; 2 console.log(/wel/.test(str)); // true 3 console.log(/will/.test(str)); //false
2.exec()方法: 該方法用於檢索字符串中的正則表達式的匹配。
RegExpObject.exec(需要檢測的字符串) //返回一個數組,存放匹配的結果,如果未找到匹配,則返回值為null;
該返回的數組的第一個元素是與正則表達式相匹配的文本,該方法還返回2個屬性,index屬性聲明的是匹配文本的第一個字符的位置;input屬性則存放的是被檢索的字符串string;該方法如果不是全局的話,返回的數組與match()方法返回的數組是相同的。
var str = "welcome to China,we are family"; console.log(/come/.exec(str)); //["come", index: 3, input: "welcome to China,we are family"] console.log(/will/.exec(str)); // null
JavaScript正則表達式的學習