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