正則表達式設計思想是用一種描述性的語言來給字符串定義一個規則,凡是符合規則的字符串,咱們就認爲它「匹配」了,不然,該字符串就是不合法的。javascript
初級java
進階正則表達式
[]表示範圍設計
1 [0-9a-zA-Z_]能夠匹配一個數字、字母或者下劃線; 2 [0-9a-zA-Z_]+能夠匹配至少由一個數字、字母或者下劃線組成的字符串,好比'a100','0_Z','js2015' 3 [a-zA-Z_$][0-9a-zA-Z_$]*能夠匹配由字母或下劃線、組成的字符串,也就是JavaScript容許的變量名; 4 [a-zA-Z_$][0-9a-zA-Z_$]{0, 19}更精確地限制了變量的長度是1-20個字符(前面1個字符+後面最多19個字符) 5 A|B能夠匹配A或B,因此(J|j)ava(S|s)cript能夠匹配'JavaScript'、'Javascript'、'javaScript'或者'javascript'。 6 ^表示行的開頭,^\d表示必須以數字開頭 7 表示必須以數字結束對象
建立一個正則表達式 第一種方式 var re1 = /ABC-001/; 第二種方式 var re2 = new RegExp('ABC\-001'); 建立一個RegExp對象.其中\其實是一個\ip
判斷正則表達式是否匹配 var re = /^\d{3}-\d{3,8}$/; re.test('010-12345'); // true re.test('010-1234x'); // false字符串
切分字符串 'a b c'.split(/\s+/); 結果// ['a', 'b', 'c'] 'a,b;; c d'.split(/[\s,;]+/); 結果// ['a', 'b', 'c', 'd']it
分組groupio
()表示的就是要提取的分組, 若是正則表達式中定義了組,就能夠在RegExp對象上用exec()方法提取出子串來class
exec()方法在匹配成功後,會返回一個Array,第一個元素是正則表達式匹配到的整個字符串,後面的字符串表示匹配成功的子串。
exec()方法在匹配失敗時返回null。 好比 var re = /^(\d{3})-(\d{3,8})$/; re.exec('010-12345'); // ['010-12345','010','12345'] re.exec('010 12345'); // null
貪婪匹配 正則匹配默認是貪婪匹配,也就是匹配儘量多的字符
var re = /^(\d+)(0*)$/; re.exec('102300'); // ['102300', '102300', '']
因爲\d+採用貪婪匹配,直接把後面的0所有匹配了,結果0*只能匹配空字符串了。
必須讓\d+採用非貪婪匹配(也就是儘量少匹配),才能把後面的0匹配出來,加個?就能夠讓\d+採用非貪婪匹配:
var re = /^(\d+?)(0*)$/; re.exec('102300'); // ['102300', '1023', '00']
JavaScript的正則表達式還有幾個特殊的標誌,最經常使用的是g,表示全局匹配: var r1 = /test/g; // 等價於: var r2 = new RegExp('test', 'g');
經常使用的正則表達式 Email 地址: ^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)* 密碼驗證 (?!^[0-9]+)(?!^[^A-z0-9]+ 郵編驗證 [1-9]d{5}(?!d) 手機號碼驗證 ^1\d{10}