親愛(ài)的讀者朋友,如果你點(diǎn)開(kāi)了這篇文章,說(shuō)明你對(duì)正則很感興趣。
創(chuàng)新互聯(lián)主營(yíng)柳河網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP開(kāi)發(fā)公司,柳河h5成都微信小程序搭建,柳河網(wǎng)站營(yíng)銷推廣歡迎柳河等地區(qū)企業(yè)咨詢
想必你也了解的重要性,在我看來(lái)正則表達(dá)式是衡量程序員水平的一個(gè)標(biāo)準(zhǔn)。
關(guān)于正則表達(dá)式的教程,網(wǎng)上也有很多,相信你也看了一些。
與之不同的是,本文的目的是希望所有認(rèn)真讀完的童鞋們,都有實(shí)質(zhì)性的提高。
本文共有七章,用JavaScript語(yǔ)言完整地討論了的方方面面。
如果覺(jué)得文章某塊兒沒(méi)有說(shuō)明白清楚,歡迎留言,能力范圍之內(nèi),老姚必做詳細(xì)解答。
構(gòu)造的方法和創(chuàng)建數(shù)學(xué)表達(dá)式的方法一樣。也就是用多種元字符與運(yùn)算符可以將小的表達(dá)式結(jié)合在一起來(lái)創(chuàng)建更大的表達(dá)式。正則表達(dá)式的組件可以是單個(gè)的字符、字符集合、字符范圍、字符間的選擇或者所有這些組件的任意組合。
正則表達(dá)式是由普通字符(例如字符 a 到 z)以及特殊字符(稱為"元字符")組成的文字模式。模式描述在搜索文本時(shí)要匹配的一個(gè)或多個(gè)字符串。正則表達(dá)式作為一個(gè)模板,將某個(gè)字符模式與所搜索的字符串進(jìn)行匹配。
正則表達(dá)式如下:/^1[6-9]$|^[2-9]\d$|^1\d{2}$/。
^符號(hào)表示字符串的開(kāi)頭,^1表示字符串的第一個(gè)源字符是1
$100符號(hào)表示字符串的結(jié)束
符號(hào)表示一組字符,即位置匹配[]中的任何字符,[6-9]表示字符可以是6、7、8或9中的任何字符。類似地,[2-9]表示2~9中的任何字符
\d匹配0到9之間的任何數(shù)字和任何字符
{2}表示之前匹配的字符數(shù)為2,\d{2}表示匹配的字符數(shù)為2
|表示or的關(guān)系,如果任何一個(gè)表達(dá)式匹配,則整個(gè)表達(dá)式都匹配
^1[6-9]$匹配2位數(shù)字,第1位是1,第2位是6~9,即度匹配16~19
^[2-9]\d$匹配2位數(shù)字,第一個(gè)是2~9,第二個(gè)是任意數(shù)字,即匹配20~99
^1\d{2}$匹配3位數(shù)字,第1位是1,后2位是任意數(shù)字,即匹配100~199
擴(kuò)展資料:
規(guī)則表系統(tǒng)由一些普通的位字符和一些元字符組成。普通字符包括大寫字母、小寫字母和數(shù)字,而元字符有特殊的含義,我們將在下面解釋。
在其最簡(jiǎn)單的形式中,正則表達(dá)式看起來(lái)像一個(gè)普通的查找字符串。例如,正則表達(dá)式“testing”不包含元字符;它可以匹配字符串“testing”和“testing123”,但不能匹配“testing”。
理解元字符是真正使用正則表達(dá)式的最重要的事情。
RegExp是JS的正則表達(dá)式對(duì)象,實(shí)例化一個(gè)RegExp對(duì)象有 字面量 和 構(gòu)造函數(shù) 2種方式。
字面量實(shí)例化RegExp對(duì)象
var reg=/js/gi;
開(kāi)始和結(jié)束的斜線/是正則表達(dá)式的邊界,//中間的文本是正則表達(dá)式文本,后面的gi是正則表達(dá)式的修飾符。
構(gòu)造函數(shù)實(shí)例化RegExp對(duì)象
var reg=new Regex(‘js’,’gi’);
第一個(gè)參數(shù)是正則表達(dá)式文本,第二個(gè)參數(shù)是正則表達(dá)式修飾符。
global:RegExp 對(duì)象是否具有標(biāo)志 g。
ignoreCase:RegExp 對(duì)象是否具有標(biāo)志 i。
lastIndex:一個(gè)整數(shù),標(biāo)示開(kāi)始下一次匹配的字符位置。
multiline:RegExp 對(duì)象是否具有標(biāo)志 m。
source:正則表達(dá)式的源文本。
RegExp 對(duì)象有 3 個(gè)方法:test()、exec() 以及 compile()。
test()
test() 方法檢索字符串中的指定值。返回值是 true 或 false。
示例:
var reg=/js/gi;
var result=reg.test(‘I like js’);
結(jié)果:true
exec()
exec() 方法檢索字符串中的指定值。返回值是被找到的值。如果沒(méi)有發(fā)現(xiàn)匹配,則返回 null。
示例:
var reg=/js/gi;
var result=reg.exec(‘I like JS’);
結(jié)果:JS
compile()
compile() 方法用于改變 RegExp。
compile() 既可以改變檢索模式,也可以添加或刪除第二個(gè)參數(shù)。
g:global全文搜索,如果不添加此參數(shù),搜索到第一個(gè)匹配就會(huì)停止
i:ignore case 不區(qū)分大小寫,默認(rèn)是區(qū)分大小寫的
m:multiple lines 多行搜索,默認(rèn)只搜索第一行
正則表達(dá)式文本部分包含 原義文本字符 和 元字符, 其中的原義文本字符代表字符本身意義的字符,如abc123之類的字符。
元字符代表有特殊含義非字母字符,如\b、\w、\d、+、*、? 等。
常用的元字符
更多的JS正則元字符請(qǐng)參考:
一般情況下正則表達(dá)式中的一個(gè)字符對(duì)應(yīng)字符串中的一個(gè)字符,如表達(dá)式ab的含義是ab。
表達(dá)式中用 [] 來(lái)定義一個(gè)字符類,表示可以匹配[]里面的這類字符,是一個(gè)泛指,而不是一一對(duì)應(yīng)的關(guān)系。
如表達(dá)式[abc123],表示有其中一個(gè)字符串都可以匹配。
在字符類里面使用橫線-連接2個(gè)數(shù)字或者字母就可以構(gòu)建一個(gè)范圍類,如[a-zA-z0-9-]表示可以匹配26個(gè)大小寫字母和0-9的全部數(shù)字以及橫線-。
注意,要匹配橫線”-“,必須把橫線放在最后面。
預(yù)定義類可以理解為JS默認(rèn)給我們寫好的范圍類,讓我們可以使用一個(gè)簡(jiǎn)單的元字符來(lái)使用它。如”\w”就是一個(gè)預(yù)定義類,它等價(jià)于范圍類[A-Za-z0-9_];“.”可以匹配除 “\n” 之外的任何單個(gè)字符。
邊界包含2種,一種是以字符串開(kāi)始或結(jié)尾的邊界,另一種是單詞邊界
量詞表示可以匹配連續(xù)多次的元字符
JS正則表達(dá)式默認(rèn)是貪婪模式匹配,它會(huì)以最多匹配原則進(jìn)行查找,非貪婪模式可以讓表達(dá)式以最少匹配原則進(jìn)行查找。
非貪婪模式只需要在量詞后面加上”?”即可,如”123456789″字符串想以3個(gè)數(shù)字為一組進(jìn)行匹配表達(dá)式寫法/\d{3,5}?/g。
表達(dá)式中用 () 來(lái)定義一個(gè)分組,使元字符可以作用于一個(gè)表達(dá)式字符串組合,如/(js|php){3}/gi。
表達(dá)式中的每一個(gè)分組匹配的內(nèi)容都是一個(gè)可以捕獲的變量,可以使用$1、$2、$3… 來(lái)取值,如表達(dá)式/(\d{4})-(\d{2})-(\d{2})/中包含$1、$2、$3。如果想忽略分組匹配的內(nèi)容,需要在分組前面增加“?:”,就可以得到分組匹配之外的內(nèi)容。
前瞻就是正則表達(dá)式后面加上斷言部分,它不但要匹配表達(dá)式部分,還需要滿足斷言部分,匹配的結(jié)果不會(huì)包含斷言部分。
正向前瞻 exp(?=assert) 如 “\w(?=\d)”
負(fù)向前瞻 exp(?!assert) 如 “\w(?!\d)”
match()
stringObject.match(regexp)
match() 方法可在字符串內(nèi)檢索指定的值,或找到一個(gè)或多個(gè)正則表達(dá)式的匹配。
如果 regexp 沒(méi)有標(biāo)志 g,那么 match() 方法就只能在 stringObject 中執(zhí)行一次匹配。
如果沒(méi)有找到任何匹配的文本, match() 將返回 null。
否則,它將返回一個(gè)數(shù)組,其中存放了與它找到的匹配文本有關(guān)的信息。該數(shù)組的第 0 個(gè)元素存放的是匹配文本,而其余的元素存放的是與正則表達(dá)式的子表達(dá)式匹配的文本。
search()
stringObject.search(regexp)
search() 方法不執(zhí)行全局匹配,它將忽略標(biāo)志 g。它同時(shí)忽略 regexp 的 lastIndex 屬性,并且總是從字符串的開(kāi)始進(jìn)行檢索,這意味著它總是返回 stringObject 的第一個(gè)匹配的位置。
replace()
stringObject.replace(regexp/substr,replacement)
字符串 stringObject 的 replace() 方法執(zhí)行的是查找并替換的操作。它將在 stringObject 中查找與 regexp 相匹配的子字符串,然后用 replacement 來(lái)替換這些子串。如果 regexp 具有全局標(biāo)志 g,那么 replace() 方法將替換所有匹配的子串。否則,它只替換第一個(gè)匹配子串。
replacement 可以是字符串,也可以是函數(shù)。如果它是字符串,那么每個(gè)匹配都將由字符串替換。但是 replacement 中的 $ 字符具有特定的含義。如下表所示,它說(shuō)明從模式匹配得到的字符串將用于替換。
split()
stringObject.split(separator,howmany)
如果 separator 是包含子表達(dá)式的正則表達(dá)式,那么返回的數(shù)組中包括與這些子表達(dá)式匹配的字串(但不包括與整個(gè)正則表達(dá)式匹配的文本)
正則表達(dá)式語(yǔ)法語(yǔ)意測(cè)試工具:
網(wǎng)站標(biāo)題:javascript正則元字符,正則表達(dá)式常用元字符
文章轉(zhuǎn)載:http://sd-ha.com/article44/dsesphe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、網(wǎng)站制作、App設(shè)計(jì)、標(biāo)簽優(yōu)化、企業(yè)網(wǎng)站制作、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)