1、 match、replace
2、 test
3、 exec正則表達式
1、match、replace的調用對象是字符串, test,exec的調用對象是正則表達式對象。 二、test 返回結果是boolen值, exec返回的結果是匹配到的數組(沒有匹配到返回null) exec執行時,若是沒有子匹配項(即沒有括號的狀況),不管有沒有參數g, 只返回一個匹配項, 加g與不加g的區別: 加g再下一次調用exec的時候,會從上一次匹配結束後的地方從新開始匹配(即lastIndex的值會變化), 不加g,每次都是從頭開始匹配。 三、match 執行的結果接近 exec。 區別以下: * 當沒有子匹配項, 且非全局匹配時, 結果同樣 * 當沒有子匹配項, 且全局匹配時, 結果不同,match匹配全部項, 可是exec會從上一次匹配結束後的地方從新開始匹配(即lastIndex的值會變化) * 當有子匹配項, 且非全局匹配時, 結果同樣 * 當有子匹配項, 且全局匹配時, 結果不同, match會忽略子匹配項, exec正確返回全部匹配到的結果。 結論: exec沒有子匹配項的時候,只會返回第一個匹配到的數組。 match在有子匹配項後,會匹配全部匹配項,不須要另外添加全局匹配,添加了反卻是不對了。
關於match與exec的區別的例子能夠參考這裏數組
1、replace的調用對象是string;
2、兩個參數,
-第一個參數傳入的正則表達式(匹配規則);
- 第二個參數是:經過匹配規則匹配到後,想傳入的字符串或者函數;
3、返回的是匹配後的字符串。markdown
參考的原文地址:https://www.jianshu.com/p/31b...
一個簡單的例子:函數
var str = 'red+green+world'; str.replace(/red/, blue); // 將經過正則表達式匹配到的結果以第2個參數替換 str.replace(/\+/g, ' '); // 將全部的加號,以空格替換
關於第一個參數,正則表達式沒什麼可說的,
第2個參數,有點講究:.net
$& 第一個參數(規則)的結果 $` 第一個參數(規則)的結果的全部左邊的字符串 $' 第一個參數(規則)的結果的全部右邊的字符串 $1,$2,$3...$n 第一個參數(規則)的結果的對應的子字符串
$& 適用於沒有子表達式的狀況code
var sStr='討論一下正則表達式中的replace的用法'; sStr.replace(/正則表達式/,'《$&》'); // 獲得:"討論一下《正則表達式》中的replace的用法"
var sStr='討論一下正則表達式中的replace的用法'; sStr.replace(/正則表達式/,'《$`》'); // 獲得:"討論一下《討論一下》中的replace的用法"
匹配字符串右邊的全部字符,注意,既然 $' 有單引號,那麼外面的引號必須雙引號,若是不能夠雙引號,只能把 $' 的單引號轉義。regexp
var sStr='討論一下正則表達式中的replace的用法'; sStr.replace(/正則表達式/,"《$'》"); // 獲得:"討論一下《中的replace的用法》中的replace的用法"
依次匹配子表達式,$1匹配的是字符串中匹配到的內容,不是正則表達式。
全局匹配的狀況沒寫,htm
@@...@@'markdown語法變成'<blink>...</blink> var a = '@@aaa@@ @@bbb@@'; a.replace(/\"([^"]*)"/g,'<blink>$1</blink>');
var sStr='討論一下正則表達式中的replace的用法'; sStr.replace(/(正則)(.+?)(式)/,"《$1》$2<$3>"); // 獲得:"討論一下《正則》表達<式>中的replace的用法"
若是第2個參數是函數
先看arguments的用法:對象
var sStr='討論一下正則表達式中的replace的用法'; sStr.replace(/(正則).+?(式)/,function() { console.log(arguments); }); // ["正則表達式", "正則", "式", 4, "討論一下正則表達式中的replace的用法"]
g全局匹配,i忽略大小寫 不帶g的狀況下,從左向右匹配,若是匹配到了則不在向右匹配了, 帶g的狀況,則從頭至尾都匹配完,返回全部匹配到的數據。
16個元字符索引
元字符 名稱 匹配對象 . 點號 單個任意字符(除回車\r、換行\n、行分隔符\u2028和段分隔符\u2029外) [] 字符組 列出的任意一個字符 [^] 排除型字符組 未列出的單個任意字符 ? 問號 匹配0次或1次 * 星號 匹配0交或屢次 + 加號 匹配1次或屢次 {min,max} 區間量詞 匹配至少min次,最多max次 ^ 脫字符 行的起始位置 $ 美圓符 行的結束位置 | 豎線 分隔兩邊的任意一個表達式 () 括號 限制多選結構的範圍,標註量詞做用的元素,爲反向引用捕獲文本 \1,\2... 反向引用 匹配以前的第1、第二...組括號內的表達式匹配的文本 \w 匹配字母或數字或下劃線或漢字 \d 匹配數字 \b 匹配單詞的開始或結束 \s 匹配任意的空白符
(?:exp)
匹配exp,不捕獲,不分組
(exp)
匹配exp,而且分組
1,匹配某個字符串前面的位置(?<=exp)
這個位置的前面能匹配exp(這個位置的前面是exp)
2,匹配exp後面的位置(?=exp)
這個位置的後面能匹配exp(這個位置的後面是exp)
3,匹配某個字符串前面的位置(?<!exp)
這個位置的前面不能匹配exp(這個位置的前面不是exp)
4,匹配exp後面的位置(?!exp)
這個位置的後面不能匹配exp(這個位置的後面不是exp)
匹配三個字符img的隨機組合,可是不能重複var reg = /i|m|g|im|mi|ig|gi|mg|gm|img|igm|mig|mgi|gim|gmi/
;
上面這種寫法確實能夠。
/^(?!([img])(?=.*\1))[img]+$/
上面的正則表達式在正則鐵路圖中看的更清楚。
正則鐵路圖
理解:?!
這個位置的後面,不能知足表達式([img])(?=.*\1)
,才能夠。
這個比較繞, ?=
,用它來理解, 這個位置的後面,須要知足表達式([img])(?=.*\1)
,才能夠。
這個表達式是([img])(?=.*\1)
;
先是匹配img其中一個,緊跟着的後面的字符串中須要知足\1
,便是以前匹配成功後的img其中一個。([img])(?=.*\1)
的意思也就是說, 必須重複出現i*i
,m*m
,g*g
這種狀況,才知足。
而後?!
,取反,不能重複出現i*i
,m*m
,g*g
這種狀況,才知足。
也就是說,在開始位置,不能重複出現i*i
,m*m
,g*g
這種狀況。/^(?!([img])(?=.*\1))[img]+$/
,不能知足igg,能後面重複的狀況。
/^(([img])(?!.*\2))+$/
的理解:
經過正則鐵路圖理解([img])(?!.*\2)
先是匹配img其中一個,緊跟着的後面的位置,後面的子符串中不能有\2
,便是以前匹配成功後的img其中一個。而後總體向後循環檢驗不能出現重複字符。
split是根據指定的分隔符,將字符串分隔成多個子字符串,返回這些子字符串構成的數組。
split中使用正則來實現分割。
var colorText = "red,blue,green,yellow"; var colors3 = colorText.split(/[^\,]+/); //["", ",", ",", ",", ""]
/[^\,]+/
這個正則表達式的意思就是,不是,
的多個字符。
也就是說根據不是,
的多個字符,將colorText
分割。
不是,
的多個字符 指的就是red blue green yellow,
分割結果就是:'' (red) ',' (blue) ',' (green) ',' (yellow) ''
括弧中的就是指定的分割符,結果就是["", ",", ",", ",", ""]
。
js中申明:
var str = '1/';
會報錯,
可是
var str = '1\';
不會報錯,爲何呢?\
這個東東是能夠轉譯其餘特殊字符的,看下面這個,
var str = '1\'';
當這麼申明後, var str = '1\''
; \
後面的單引號被\
給轉譯成了一個普通的引號,就成了 var str = '1''
,
若是寫成var str = '1\', 因爲
`後面的單引號被\
給轉譯成了一個普通的引號了, str這個字符串只有一個開始的引號,沒有結束的引號了。因此語法報錯。