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