摘要:如果你知道正則表達式模式將會改變,或者你事先不知道什么模式,而是從另一個來源獲取,如用戶輸入,這些情況都可以使用構造函數。
為什么要使用正則表達式
正則表達式通過由普通字符和特殊字符組成的文字模板完成對字符串的校驗,搜索,替換。在javascript中類似這樣
/^1d{10}$/
上面的這個簡單的正則用來匹配手機號
至于說正則表達式到底有什么意義,借由《精通正則表達式》里面的一句話來概括好了。
? “如果羅列計算機軟件領域的偉大發明,我相信絕對不會超過二十項,在這個名單當中,當然應該包括分組交換網絡,Web,Lisp,哈希算法,UNIX,編譯技術,關系模型,面向對象,XML這些大名鼎鼎的家伙,而正則表達式也絕對不應該被漏掉。正則表達式的生成
?對很多實際工作而言,正則表達式簡直是靈丹妙藥,能夠成百倍的提高開發效率和程序質量。”
在javascript中生成正則表達式的方式有兩種
調用RegExp對象的構造函數
var reg = new RegExp("^[a-z]+[0-9]$", "gi")
其中第一個參數是匹配模式,第二個參數是可選參數(g, i, m),分別用于指定全局匹配、區分大小寫的匹配和多行匹配。這種方式會在正則表達式運行時編譯(runtime compilation)。如果你知道正則表達式模式將會改變,或者你事先不知道什么模式,而是從另一個來源獲取,如用戶輸入,這些情況都可以使用構造函數。
使用正則表達式字面值,將匹配模式封閉在兩個斜杠中
var reg = /^[a-z]+[0-9]$/gi
當表達式被賦值時,字面量形式提供正則表達式的編譯(compilation),當正則表達式保持為常量時一般使用字面量方式。例如當你在循環中使用字面量構造一個正則表達式時,正則表達式不會在每一次迭代中都被重新編譯(recompiled)
正則表達式的組成正則表達式的文字模板是有很多不同類型的字符組成的,包括:
元字符,轉義字符,限定符,字符組,或結構,括號分組
字符 | 含義 |
---|---|
. | 匹配除了換行符(n)以外的所有字符 |
w | 匹配字母,數字,下劃線 |
W | 匹配除了字母,數字,下劃線以外的其他字符 |
d | 匹配數字 |
D | 匹配除了數字以外的其他字符 |
s | 匹配任意的空白符(f, n, r, t, v) |
S | 匹配空白符以外的任意字符 |
b | 匹配單詞的開始或者結束 |
B | 匹配單詞的非開始或者結束 |
^ | 匹配行首 |
$ | 匹配行尾 |
* + ? | { [ ( ) ] }^ $ . # 和 空白 這些字符都是需要轉義的。例如我們要匹配{。
{限定符
字符 | 含義 |
---|---|
* | 匹配零次至多次 |
+ | 匹配一次至多次 |
? | 匹配零次或一次 |
{2,} | 至少匹配兩次 |
{10} | 匹配10次 |
{{2, 8}} | 至少匹配兩次之多匹配八次 |
中括號字符組用來匹配括號內的字符之一
"fasfagxfasdfyfasfz".split(/[xyz]/) //["fasfag", "fasdf", "fasf", ""]
還有一種排除性字符組
"xaxbycz".split(/[^xyz]/) //["x", "x", "y", "z"]或結構 |
例如c|d匹配或者d
/c|d/.test("af") // false /c|d/.test("ad") // true括號分組
(cd){1,} 可以匹配cdcd..等, 其中cd便是一個分組。
/(cd){1,}$/.test("cdcd") //true貪婪模式和非貪婪模式
默認情況下,所有的限定詞都是貪婪模式,表示盡可能多的去捕獲字符。而在限定詞后增加“?”,則是非貪婪模式,表示盡可能少的去捕獲字符。
"ccccccd".match(/c+/) //["ccccc"], 貪婪模式, 捕獲所有 "ccccccd".match(/c+?/) //["c"], 非貪婪模式, 只捕獲到第一個捕獲分組
在實際應用中我們很有可能需要獲取到匹配的字符串,例如我們要將字符串"萬里碧空飄著朵朵白云"替換成"萬里碧空沒有一朵白云"
"萬里碧空飄著朵朵白云".replace(/(萬里碧空)飄著朵朵白云/, "$1沒有一朵白云")
捕獲性分組會創建反向引用,js中可以通過 $+number 或者 "反斜杠"+number" 表示法進行引用。
注意:反斜杠+number這種引用可以在正則表達式中使用,可用于匹配不同位置的相同子串,例如:
"www.bai.bai.com".replace(/([a-z]+).1/, "$1") // www.bai.com非捕獲性分組
非捕獲性分組,通常由一對括號加上”?:”加上子表達式組成,非捕獲性分組不會創建反向引用,就好像沒有括號一樣。捕獲性分組和無捕獲性分組在搜索效率方面也沒什么不同,沒有哪一個比另一個更快。
/^(?:d+)/正則表達式的方法 test
檢索字符串中的指定子串,返回布爾值
/^d[a-zA-Z]{3}$/.test("1aac") // trueexec
返回一個數組,數組中的第一個條目是第一個匹配
/^d[a-zA-Z]{3}$/.exec("1aac") // ["1aac"]String可以使用正則表達式的方法 search
返回子串的開始位置
"a12b2334c34".search(/d{4}/) // 4match
返回匹配到的子串
"a12b2334c34".match(/d{4}/) // ["2334"]replace
替換匹配到的子串
"a12b2334c34".replace(/d{4}/, "cccc") // "a12bccccc34"split
將字符串分割成數組
"a12b2334c34".split(/d{4}/) // ["a12b", "c34"]斷言 正向先行斷言 (?=exp)
代表字符串中的一個位置,緊接該位置之后的字符序列能夠匹配 exp
/f(?=234)/.test("123abcf234acd") //true負向先行斷言(?!exp)
代表字符串中的一個位置,緊接該位置之后的字符序列不能匹配 exp
/f(?!234)/.test("123abcf234acd") //false常用的正則表達式 Email 地址:
^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$URl驗證
[a-zA-z]+://[^s]* 或 ^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$密碼驗證
(?!^[0-9]+$)(?!^[A-z]+$)(?!^[^A-z0-9]+$)^[^su4e00-u9fa5]{6,16}$郵編驗證
[1-9]d{5}(?!d)手機號碼驗證
^1d{10}$漢字驗證
^[u4e00-u9fa5]{0,}$
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82211.html
摘要:正則表達式一直是里比較難以掌握的點。在中創建正則的兩種方式使用字面量這就是正則表達式的字面量語法,表示正則表達式的模式,為正則表達式的標志。字面量形式的正則表達式一般使用較多,也推薦大家盡可能使用這種形式,簡潔易讀,符合正常的使用習慣。 正則表達式一直是js里比較難以掌握的點。 看不懂,學不會,記不住。 每次需要用到正則的時候,都需要再去查找資料。 今天花時間把正則的知識點總結下,希望...
摘要:簡言本文給出了兩個密碼強度的正則表達式方案,一個簡單,一個更復雜和安全。要寫出正確的正則表達式,先要定義表達式規則。重復在正則表達式中用來表示元素重復出現的次數。你可以根據項目需要,自己調整上述正則表達式。 簡言 本文給出了兩個密碼強度的正則表達式方案,一個簡單,一個更復雜和安全。并分別給出了兩個方案的解析和測試程序。一般大家可以根據自己的項目的實際需要,自行定義自己的密碼正則約定。 ...
摘要:首先推薦幾個正則表達式編輯器正則表達式是一種查找以及字符串替換操作。此表所列的常用正則表達式,除個別外均未在前后加上任何限定,請根據需要,自行處理。例如對而言,則采用一對引號來確定正則表達式的邊界。 這篇文章本來很早就要寫的,拖了挺久的,現在整理下,供大家學習交流哈! 基本概念 正則表達式是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為元字符)。模式描述在搜...
閱讀 917·2021-11-08 13:22
閱讀 2841·2021-09-29 09:45
閱讀 2824·2021-09-09 11:52
閱讀 2257·2019-08-30 13:20
閱讀 3740·2019-08-29 13:28
閱讀 1356·2019-08-29 12:32
閱讀 2720·2019-08-29 11:10
閱讀 1644·2019-08-26 13:34