首先,正則表達式 這個東西是幹嗎用的?正則表達式
-好比我要判斷用戶輸入的郵箱是否合法,或者咱們想提取字符串裏的某個特定字符,那麼咱們就能夠用正則表達式來解決這些問題了。數組
正則表達式是一種描述性的語言來給字符串定義一個規則,凡是符合規則的字符串就是匹配了,不然該字符串不合法。ruby
匹配規則:jsp
- \d 匹配一個數字,如 '0a\d'可匹配‘0a8’,不能匹配‘0aa’; '\d\d'可匹配'66';spa
- \w 匹配一個字母或者數字,如'0a\w'既可匹配'0a8',還可匹配‘0aa’; '\w\w\w'可匹配'11a','aaa' ;code
- . 匹配任意字符,如'wh.'可匹配'whd','whx','wh!','wh8'等等;對象
- * 匹配任意個字符(包括0個);blog
- + 匹配至少1個字符索引
- ?匹配0或者1個字符ip
- i忽略大小寫匹配
- m多行匹配
- \s 匹配一個空格(包括Tab等空白符)
- {n}匹配n個字符,'\d{4}'匹配4個數字,好比'0755'
- {n,m}匹配n-m個字符,'\d{3,8}'可匹配3-8個數字,如'1234','123','12345678' ;
- [] 表示範圍匹配,這樣能夠作到更精準匹配,[0-9a-zA-Z\_]+能夠匹配至少由一個數字、字母或者下劃線組成的字符串,好比'a9f','a_0','2017';
- A|B 能夠匹配A或B,因此'(J|j)s'能夠匹配'Js'和'js' ;
- ^表示行的開頭,'^\d'表示以數字開頭;
- $表示行結束,'\d$'表示以數字結束;js能夠匹配'jsp',加上'^js$'後只能匹配'js'了;
- ()表示分組;
JavaScript正則表達式建立的方式有兩種:
第一種是經過 /正則表達式/ 形式寫出來, 第二種是經過new RegExp('正則表達式')。兩種方式是同樣的:
var re1 = /whd\88188/; var re2 = new RegExp('whd\\88188'); //注意這種方法須要轉義,兩個\\實際上是一個\ re1; // /whd|88188/ re2; // /whd|88188/
一、如何判斷正則表達式是否匹配:
var re = /^\d{4}\-\d{3-8}$/; re.test('0755-88188'); //true re.test('075-88188'); //false re.test('0755-88188whd'); //false
RegExp對象的test()方法用於檢測字符串是否符合條件。
二、如何切割字符串
split()方法用於切割字符串,切割例子以下:
'w h d'.split(''); //['w','','h','','d']
發現沒有,沒法識別空格,來,加點正則表達式
'w h d'.split(/\s+/); //['w','h','d']
加上,;試試
'w,h;; d'.split(/[\s\,\;]+/); //['w','h','d']
能夠用split()方法把不規範地輸入轉化爲規範地輸入。
3,如何提取子串
用exec()方法提取子串,如咱們要提取區號和本地號碼
var re = /^(\d{4})-(\d{3,8})$/; re.exec('0755-123456'); // ['0755-123456', '0755', '123456'] re.exec('0755 123456'); // null
exec()方法匹配成功後,回返回一個數組,第一個元素是正則表達式匹配到的整個字符串,後面是匹配成功的子串。
四、貪婪匹配
正則表大式默認貪婪匹配,它會匹配儘量多的字符,舉個栗子,要匹配出數字後面全部的0
var re = /^(\d+)(0*)$/; re.exec('1023000'); //["1023000","1023000",""]
由於 \d+採用的是貪婪匹配,把'1023000'全部的數字都匹配了,結果0*匹配了空字符串,如今要不匹配全部數字,就得讓\d+變成非貪婪匹配,加?能實現
var re = /^(\d+?)(0*)$/; re.exec('1023000'); //["1023000","1023","000"]
五、全局搜索
g表示全局匹配
var re1 = /whd88188/g ;
var re2 = new RegExp('whd88188','g');
這兩種表達方式是等價的
全局匹配能夠用exec()方法來搜索一個匹配的字符串,指定g標誌後,每次運行exec(),正則表達式自己會更新lastIndex屬性,表示上次匹配到的最後索引,
var s = 'JavaScript, VBScript, JScript and ECMAScript'; var re=/[a-zA-Z]+Script/g; // 使用全局匹配: re.exec(s); // ['JavaScript'] re.lastIndex; // 10 re.exec(s); // ['VBScript'] re.lastIndex; // 20 re.exec(s); // ['JScript'] re.lastIndex; // 29 re.exec(s); // ['ECMAScript'] re.lastIndex; // 44 re.exec(s); // null,直到結束仍沒有匹配到
遇到常常過來回顧回顧……嗯,雖然是這樣說……本身都要相信本身了