最近項目中一直要用的正則,並且也不是匹配經常使用的正則規則好比手機號和身份證號之類了,因此就把正則語法看了遍。上篇文章有關於正則的語法和正則在線轉換工具。javascript
今天總結下 js中適用於正則匹配的RegExp對象和String對象的方法。(裏面的知識點主要是參考於w3c)java
一,先說RegExp對象的方法web
方法名 | 語法 | 參數 | 返回值 | 說明 | 案例 |
test() |
RegExpObject.test(string)
|
string:必需是字符串 |
若是字符串 string 中含有與 RegExpObject 匹配的文本,則返回 true,不然返回 false
|
調用 RegExp 對象 r 的 test() 方法,併爲它傳遞字符串 s,與這個表示式是等價的:(r.exec(s) != null)。能夠匹配全局
|
var str = "Visit W3School";
var patt1 = new RegExp("W3School");
var result = patt1.test(str); document.write("Result: " + result);
//輸出:Result: true
|
exec()
|
RegExpObject.exec(string) |
string:必需是字符串 | 返回一個數組,其中存放匹配的結果。若是未找到匹配,則返回值爲 null。 | 1,若是是非全局RegExp對象與返回的數組與調用方法 String.match() 返回的數組是相同的。正則表達式 2,若是是全局RegExp對象的時候它會在 RegExpObject 的 lastIndex 屬性指定的字符處開始檢索字符串 string。當 exec() 找到了與表達式相匹配的文本時,在匹配後,它將把 RegExpObject 的 lastIndex 屬性設置爲匹配文本的最後一個字符的下一個位置。exec() 都會把完整的細節添加到它返回的數組中而match不會。因此在循環中反覆地調用 exec() 方法是惟一一種得到全局模式的完整模式匹配信息的方法。數組 |
var str = "Visit W3School, W3School is a place to study web technology."; while ((result = patt.exec(str)) != null) { 輸出:spa W3School |
compile() | RegExpObject.compile(regexp,modifier) | regexp:正則對象regexp modifier:匹配類型 |
無 | compile() 方法用於在腳本執行過程當中編譯正則表達式。 compile() 方法也可用於改變和從新編譯正則表達式。 |
var str="Every man in the world! Every woman on earth!"; patt=/man/g; str2=str.replace(patt,"person"); document.write(str2+"<br />"); patt=/(wo)?man/g; str2=str.replace(patt,"person"); document.write(str2); Every person in the world! Every woperson on earth! Every person in the world! Every person on earth! |
二,再說String對象的檢測查詢方法。這些方法都使用於字符串和正則的匹配
方法名 | 語法 | 參數 | 返回值 | 說明 | 案例 | ||||||||||||
search() | stringObject.search(regexp) | regexp:能夠是字符串也能夠說RegExp對象 | stringObject 中第一個與 regexp 相匹配的子串的起始位置。若是沒有找到任何匹配的子串,則返回 -1。 | search() 方法不執行全局匹配,它將忽略標誌 g。它同時忽略 regexp 的 lastIndex 屬性,而且老是從字符串的開始進行檢索,這意味着它老是返回 stringObject 的第一個匹配的位置。 | var str="Visit W3School!" document.write(str.search(/w3school/i)) 輸出:6 |
||||||||||||
match() | stringObject.match(searchvalue) stringObject.match(regexp) |
searchvalue:字符串 regexp:正則 |
返回一個數組,其中存放匹配的結果。若是未找到匹配,則返回值爲 null。 | 1,非全局RegExp對象match() 方法就只能在 stringObject 中執行一次匹配。若是沒有找到任何匹配的文本, match() 將返回 null。不然,它將返回一個數組,其中存放了與它找到的匹配文本有關的信息。該數組的第 0 個元素存放的是匹配文本,而其他的元素存放的是與正則表達式的子表達式匹配的文本。除了這些常規的數組元素以外,返回的數組還含有兩個對象屬性。index 屬性聲明的是匹配文本的起始字符在 stringObject 中的位置,input 屬性聲明的是對 stringObject 的引用。 2,全局RegExp對象match() 方法將執行全局檢索,找到 stringObject 中的全部匹配子字符串。若沒有找到任何匹配的子串,則返回 null。若是找到了一個或多個匹配子串,則返回一個數組。不過全局匹配返回的數組的內容與前者大不相同,它的數組元素中存放的是 stringObject 中全部的匹配子串,並且也沒有 index 屬性或 input 屬性。 3,在全局檢索模式下,match() 即不提供與子表達式匹配的文本的信息,也不聲明每一個匹配子串的位置。若是您須要這些全局檢索的信息,可使用 RegExp.exec()。若是須要循環對每一個相匹配的內容去作一系列的操做的話就用RegExp.exec()。 |
var str="Hello world!" document.write(str.match("world") + "<br />") document.write(str.match("World") + "<br />") document.write(str.match("worlld") + "<br />") document.write(str.match("world!")) world null null world! |
||||||||||||
replace() | stringObject.replace(regexp/substr,replacement) |
regexp/substr:字符串或者正則對象 replacement:一個字符串值。規定了替換文本或生成替換文本的函數。 |
一個新的字符串,是用 replacement 替換了 regexp 的第一次匹配或全部匹配以後獲得的。 |
字符串 stringObject 的 replace() 方法執行的是查找並替換的操做。它將在 stringObject 中查找與 regexp 相匹配的子字符串,而後用 replacement 來替換這些子串。若是 regexp 具備全局標誌 g,那麼 replace() 方法將替換全部匹配的子串。不然,它只替換第一個匹配子串。 replacement 能夠是字符串,也能夠是函數。若是它是字符串,那麼每一個匹配都將由字符串替換。可是 replacement 中的 $ 字符具備特定的含義。以下表所示,它說明從模式匹配獲得的字符串將用於替換。
注意:ECMAScript v3 規定,replace() 方法的參數 replacement 能夠是函數而不是字符串。在這種狀況下,每一個匹配都調用該函數,它返回的字符串將做爲替換文本使用。該函數的第一個參數是匹配模式的字符串。接下來的參數是與模式中的子表達式匹配的字符串,能夠有 0 個或多個這樣的參數。接下來的參數是一個整數,聲明瞭匹配在 stringObject 中出現的位置。最後一個參數是 stringObject 自己。 |
例子 1在本例中,咱們將使用 "W3School" 替換字符串中的 "Microsoft": <script type="text/javascript"> var str="Visit Microsoft!" document.write() </script> str.replace(/Microsoft/, "W3School") 輸出: Visit W3School! 例子 2在本例中,咱們將把 "Doe, John" 轉換爲 "John Doe" 的形式: name = "Doe, John"; name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1"); 例子 3在本例中,咱們將把字符串中全部單詞的首字母都轉換爲大寫: name = 'aaa bbb ccc'; uw=name.replace(/\b\w+\b/g, function(word){ return word.substring(0,1).toUpperCase()+word.substring(1);} );
|
||||||||||||
split() | stringObject.split(separator,howmany) | separator:字符串或正則表達式 howmany:可選。該參數可指定返回的數組的最大長度 |
一個字符串數組 | 註釋:若是把空字符串 ("") 用做 separator,那麼 stringObject 中的每一個字符之間都會被分割。 註釋:String.split() 執行的操做與 Array.join 執行的操做是相反的。 |
例子 1在本例中,咱們將按照不一樣的方式來分割字符串: <script type="text/javascript"> var str="How are you doing today?" document.write(str.split(" ") + "<br />") document.write(str.split("") + "<br />") document.write(str.split(" ",3)) </script> 輸出: How,are,you,doing,today? H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,? How,are,you 例子 2在本例中,咱們將分割結構更爲複雜的字符串: "2:3:4:5".split(":") //將返回["2", "3", "4", "5"] "|a|b|c".split("|") //將返回["", "a", "b", "c"] 例子 3使用下面的代碼,能夠把句子分割成單詞: var words = sentence.split(' ') 或者使用正則表達式做爲 separator: var words = sentence.split(/\s+/) |