js謎之正規表示式

2021-09-18 07:22:46 字數 2681 閱讀 9135

好久之前就說要寫一篇正規表示式的文章,正規表示式總是記了又忘,忘了再記,記了再忘,卒。

言歸正傳,今天終於要研究一下這個謎一樣的正規表示式了。其實正規表示式並不難(真的嗎?orz)

本文**本人部落格:

在學習之前,我們需要弄明白,到底什麼時候需要用到正規表示式,正規表示式的用途究竟是什麼?

比如說,你正在搜尋乙個檔案,這個檔案裡面包含單詞car(不區分大小寫),但是呢你又不想把包含字串car的其他單詞(例如carry)也一起找出來,那麼這個時候你就可以使用正規表示式來幫你解決問題。當然,這只是眾多場景中的一種。正規表示式功能強大,可以幫你解決各種匹配文字問題。又或者表單驗證的方式,也可以使用正規表示式來解決。

簡單來說,正規表示式就是字串,是用來匹配和處理文字的字串。用正規表示式語言建立的。

元字元:在正規表示式中有特殊含義的字元。若需要表示該字元本身,需使用\轉義。

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

為了防止出現重複匹配造成的過度匹配,因為*+都是「貪婪型」元字元,它們在進行匹配時會盡可能從一段文字的開頭一直匹配到這段文字的末尾,而不是碰到第乙個匹配就結束。

那麼這個時候就需要使用"懶惰型"。僅需在貪婪型元字元後加上?即可。如:*?,+?,?

ecmascript通過regexp型別來支援正規表示式。

var expression = / pattern / flags;
其中pattern可以是任何簡單或複雜的正規表示式。

flags用來標明正規表示式的行為。如下所示:

那麼這兩種方式的區別除了形式不一樣,還有乙個差別在於:

ecmascript 3中,正規表示式字面量始終會共享同乙個regexp例項;而使用建構函式建立的每乙個例項都是乙個例項。

不過!【敲黑板!】ecmascript 5明確規定了,使用正規表示式字面量必須想直接呼叫regexp建構函式一樣,每次都建立新的regexp例項。而各大瀏覽器也對此進行了修改。

例項屬性

例項方法

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

從上述例子可以發現,若找到,則返回乙個陣列,該陣列包含第乙個匹配項,除此之外,還有兩個屬性:index(匹配項在字串中的位置),input(應用正規表示式的字串)。若沒有匹配項返回null

對於exec而言,無論是否設定g全域性標誌,每次也只會返回乙個匹配項。但是如果在同乙個字串上多次呼叫,設定了g標誌則會繼續查詢新的匹配項,而沒有設定的話只會返回第乙個匹配項資訊。除此之外,pattern的lastindex屬性在全域性模式會增加,非全域性模式始終不變。

test()

pattern.test(text);
檢視目標字串與該模式是否匹配。匹配返回true,否則返回false。

match()

text.match(pattern);
match匹配乙個字串和乙個正規表示式。若沒有g標識,則結果與pattern.exec(text)相同。若有g標誌,則返回乙個包含所有匹配的陣列。

search()

text.search(pattern);
若找到匹配,返回第乙個匹配的首字元位置。若沒有找到返回-1。

此方法會忽略g標識,且沒有position引數。

replace()

string.replace(searchvalue, replacevalue);
searchvalue可以是乙個字串或乙個正規表示式物件。若是乙個字串,只會在第一次出現的地方被替換。若是乙個正規表示式,若有g標誌則替換所有匹配之處,若沒有則只替換第乙個匹配之處。

正規表示式是個非常好用的工具,若掌握了可達到事半功倍的效果。好好學喲~

0-9 ↩

a-za-z0-9_ ↩

fnrtv ↩

JS 之正規表示式

字元含意 做為轉意,即通常在 後面的字元不按原來意 釋,如 b 匹配字元 b 當b前面加了反斜桿後 b 轉意為匹配乙個單詞的邊界。或 對正規表示式功能字元的還原,如 匹配它前面元字元0次或多次,a 將匹配a,aa,aaa,加了 後,a 將只匹配 a 匹配乙個輸入或一行的開頭,a 匹配 an a 而不...

js正規表示式之

今天搞了乙個東西,拿到乙個url後,想在url的search後面加個引數,當然這個url是任意的 var url adtag share pre url.lastindexof 1 if url.lastindexof 1 else 後面發現,總是加不成功,如以下例子 replace zzzzz 後...

JS 之正規表示式

字元含意 做為轉意,即通常在 後面的字元不按原來意 釋,如 b 匹配字元 b 當b前面加了反斜桿後 b 轉意為匹配乙個單詞的邊界。或 對正規表示式功能字元的還原,如 匹配它前面元字元0次或多次,a 將匹配a,aa,aaa,加了 後,a 將只匹配 a 匹配乙個輸入或一行的開頭,a 匹配 an a 而不...