成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js謎之正則表達(dá)式

wendux / 633人閱讀

摘要:用正則表達(dá)式語言創(chuàng)建的。匹配非數(shù)字的字符使用元字符元字符在正則表達(dá)式中有特殊含義的字符。正則表達(dá)式默認(rèn)是區(qū)別大小寫的。正則表達(dá)式的字符串表示。若是一個正則表達(dá)式,若有標(biāo)志則替換所有匹配之處,若沒有則只替換第一個匹配之處。

前言

好久之前就說要寫一篇正則表達(dá)式的文章,正則表達(dá)式總是記了又忘,忘了再記,記了再忘,卒。
言歸正傳,今天終于要研究一下這個謎一樣的正則表達(dá)式了。其實正則表達(dá)式并不難(真的嗎?orz)
本文轉(zhuǎn)自本人博客:http://lsxj615.com/2016/08/15...

為什么要用正則表達(dá)式

在學(xué)習(xí)之前,我們需要弄明白,到底什么時候需要用到正則表達(dá)式,正則表達(dá)式的用途究竟是什么?
比如說,你正在搜索一個文件,這個文件里面包含單詞car(不區(qū)分大小寫),但是呢你又不想把包含字符串car的其他單詞(例如carry)也一起找出來,那么這個時候你就可以使用正則表達(dá)式來幫你解決問題。當(dāng)然,這只是眾多場景中的一種。正則表達(dá)式功能強大,可以幫你解決各種匹配文本問題。又或者表單驗證的方式,也可以使用正則表達(dá)式來解決。

正則表達(dá)式是什么

簡單來說,正則表達(dá)式就是字符串,是用來匹配和處理文本的字符串。用正則表達(dá)式語言創(chuàng)建的。

正則表達(dá)式的語法 匹配字符

.(英文句號):匹配任何一個單個字符

[]:匹配集合內(nèi)多個字符中的某個字符
e.g. [ns]a --> 匹配 na 或sa

[-]:匹配該區(qū)間內(nèi)的字符
e.g. [a-z] , [0-9]

^ 取非匹配:除了該字符集內(nèi)的字符,都可以匹配。只有當(dāng)^出現(xiàn)在[]之間,且緊跟在[后面,才能發(fā)揮取非的作用。
e.g. [^0-9] 匹配非數(shù)字的字符

使用元字符

元字符:在正則表達(dá)式中有特殊含義的字符。若需要表示該字符本身,需使用轉(zhuǎn)義。

d 任何一個數(shù)字字符,相當(dāng)于[0-9]

D 任何一個非數(shù)字字符,相當(dāng)于1

w 任何一個字母數(shù)字字符或下劃線字符,相當(dāng)于[a-zA-Z0-9_]

W 任何一個非字母數(shù)字字符或非下劃線字符,相當(dāng)于2

s 任何一個空白字符,等價于[fnrtv]

S 任何一個非空白字符,等價于3

總而言之,小寫字母與大寫字母都是相反的,所以記住小寫字母的含義,大寫字母則是對應(yīng)的取非含義。

重復(fù)匹配

? 0個或1個字符
e.g. [0-9]? 出現(xiàn)0次或一次,且最多只能出現(xiàn)1次數(shù)字。

+ 一個或多個字符
e.g. [0-9]+ 表示一個或多個連續(xù)的數(shù)字

* 0個或多個字符
e.g. [0-9]* 連續(xù)出現(xiàn)0次貨多次的數(shù)字

{n} 設(shè)置一個精確的重復(fù)的值
e.g. [0-9]{3} 三個數(shù)字

{min,max} 設(shè)置重復(fù)次數(shù)的最小值和最大值
e.g. [0-9]{2,4} 最少2個數(shù)字,最多4個數(shù)字

{min, } 設(shè)置重復(fù)次數(shù)的最小值
e.g. [0-9]{2,} 最少2個數(shù)字

懶惰型匹配

為了防止出現(xiàn)重復(fù)匹配造成的過度匹配,因為*+都是“貪婪型”元字符,它們在進(jìn)行匹配時會盡可能從一段文本的開頭一直匹配到這段文本的末尾,而不是碰到第一個匹配就結(jié)束。

那么這個時候就需要使用"懶惰型"。僅需在貪婪型元字符后加上?即可。如:*?,+?,{n,}?

位置匹配

 單詞邊界

B 非單詞邊界。查找前后都有多余空格的連字符。

^ 字符串開頭。出現(xiàn)在字符集合的外面且位于一個模式的開頭,^匹配字符串的開頭

$ 字符串結(jié)尾

Javascript中的正則表達(dá)式

ECMAScript通過RegExp類型來支持正則表達(dá)式。

var expression = / pattern / flags;

其中pattern可以是任何簡單或復(fù)雜的正則表達(dá)式。
flags用來標(biāo)明正則表達(dá)式的行為。如下所示:

g : 全局模式。模式應(yīng)用于所有的字符串,不是在發(fā)現(xiàn)第一個匹配項后就立即停止的。

i : 不區(qū)分大小寫。正則表達(dá)式默認(rèn)是區(qū)別大小寫的。i則是忽略大小寫

m : 表示多行模式,也就是說到達(dá)一行文本末尾的時候還會繼續(xù)查找下一行中是否存在與模式匹配的項。

創(chuàng)建正則表達(dá)式的方式

字面量形式來定義
var pattern = /sxj/i;

使用RegExp構(gòu)造函數(shù)
var pattern = new RegExp("sxj", "i");

那么這兩種方式的區(qū)別除了形式不一樣,還有一個差別在于:
ECMAScript 3中,正則表達(dá)式字面量始終會共享同一個RegExp實例;而使用構(gòu)造函數(shù)創(chuàng)建的每一個實例都是一個實例。

不過!【敲黑板!】ECMAScript 5明確規(guī)定了,使用正則表達(dá)式字面量必須想直接調(diào)用RegExp構(gòu)造函數(shù)一樣,每次都創(chuàng)建新的RegExp實例。而各大瀏覽器也對此進(jìn)行了修改。

RegExp實例 實例屬性

global: 布爾值,表示是否設(shè)置了g標(biāo)志

ignoreCase: 布爾值,表示是否設(shè)置了i標(biāo)志

multiline: 布爾值,表示是否設(shè)置了m標(biāo)志

lastIndex:整數(shù),表示開始搜索下一個匹配項的字符位置,從0開始。

source: 正則表達(dá)式的字符串表示。按照字面量形式返回。

實例方法
exec()
pattern.exec(text);

查找text中的匹配項。

//例子
var pattern = /sxj/i;
var text = "sxj is a good student sxj haha";
console.log(pattern.exec(text));
//["sxj", index: 0, input: "sxj is a good student sxj haha"]
var pattern2 = /shi/i;
console.log(pattern2,exec(text));//null

從上述例子可以發(fā)現(xiàn),若找到,則返回一個數(shù)組,該數(shù)組包含第一個匹配項,除此之外,還有兩個屬性:index(匹配項在字符串中的位置),input(應(yīng)用正則表達(dá)式的字符串)。若沒有匹配項返回null。

對于exec而言,無論是否設(shè)置g全局標(biāo)志,每次也只會返回一個匹配項。但是如果在同一個字符串上多次調(diào)用,設(shè)置了g標(biāo)志則會繼續(xù)查找新的匹配項,而沒有設(shè)置的話只會返回第一個匹配項信息。除此之外,pattern的lastIndex屬性在全局模式會增加,非全局模式始終不變。

test()
pattern.test(text);

查看目標(biāo)字符串與該模式是否匹配。匹配返回true,否則返回false。

String中的正則表達(dá)式
match()
text.match(pattern);

match匹配一個字符串和一個正則表達(dá)式。若沒有g標(biāo)識,則結(jié)果與pattern.exec(text)相同。若有g標(biāo)志,則返回一個包含所有匹配的數(shù)組。

search()
text.search(pattern);

若找到匹配,返回第一個匹配的首字符位置。若沒有找到返回-1。
此方法會忽略g標(biāo)識,且沒有position參數(shù)。

replace()
string.replace(searchValue, replaceValue);

searchValue可以是一個字符串或一個正則表達(dá)式對象。若是一個字符串,只會在第一次出現(xiàn)的地方被替換。若是一個正則表達(dá)式,若有g標(biāo)志則替換所有匹配之處,若沒有則只替換第一個匹配之處。

總結(jié)

正則表達(dá)式是個非常好用的工具,若掌握了可達(dá)到事半功倍的效果。好好學(xué)喲~

0-9 ?

a-zA-Z0-9_ ?

fnrtv ?

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/80072.html

相關(guān)文章

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<