摘要:用正則表達式語言創建的。匹配非數字的字符使用元字符元字符在正則表達式中有特殊含義的字符。正則表達式默認是區別大小寫的。正則表達式的字符串表示。若是一個正則表達式,若有標志則替換所有匹配之處,若沒有則只替換第一個匹配之處。
前言
好久之前就說要寫一篇正則表達式的文章,正則表達式總是記了又忘,忘了再記,記了再忘,卒。
言歸正傳,今天終于要研究一下這個謎一樣的正則表達式了。其實正則表達式并不難(真的嗎?orz)
本文轉自本人博客:http://lsxj615.com/2016/08/15...
在學習之前,我們需要弄明白,到底什么時候需要用到正則表達式,正則表達式的用途究竟是什么?
比如說,你正在搜索一個文件,這個文件里面包含單詞car(不區分大小寫),但是呢你又不想把包含字符串car的其他單詞(例如carry)也一起找出來,那么這個時候你就可以使用正則表達式來幫你解決問題。當然,這只是眾多場景中的一種。正則表達式功能強大,可以幫你解決各種匹配文本問題。又或者表單驗證的方式,也可以使用正則表達式來解決。
簡單來說,正則表達式就是字符串,是用來匹配和處理文本的字符串。用正則表達式語言創建的。
正則表達式的語法 匹配字符.(英文句號):匹配任何一個單個字符
[]:匹配集合內多個字符中的某個字符
e.g. [ns]a --> 匹配 na 或sa
[-]:匹配該區間內的字符
e.g. [a-z] , [0-9]
^ 取非匹配:除了該字符集內的字符,都可以匹配。只有當^出現在[和]之間,且緊跟在[后面,才能發揮取非的作用。
e.g. [^0-9] 匹配非數字的字符
元字符:在正則表達式中有特殊含義的字符。若需要表示該字符本身,需使用轉義。
d 任何一個數字字符,相當于[0-9]
D 任何一個非數字字符,相當于1
w 任何一個字母數字字符或下劃線字符,相當于[a-zA-Z0-9_]
W 任何一個非字母數字字符或非下劃線字符,相當于2
s 任何一個空白字符,等價于[fnrtv]
S 任何一個非空白字符,等價于3
總而言之,小寫字母與大寫字母都是相反的,所以記住小寫字母的含義,大寫字母則是對應的取非含義。
重復匹配? 0個或1個字符
e.g. [0-9]? 出現0次或一次,且最多只能出現1次數字。
+ 一個或多個字符
e.g. [0-9]+ 表示一個或多個連續的數字
* 0個或多個字符
e.g. [0-9]* 連續出現0次貨多次的數字
{n} 設置一個精確的重復的值
e.g. [0-9]{3} 三個數字
{min,max} 設置重復次數的最小值和最大值
e.g. [0-9]{2,4} 最少2個數字,最多4個數字
{min, } 設置重復次數的最小值
e.g. [0-9]{2,} 最少2個數字
為了防止出現重復匹配造成的過度匹配,因為*和+都是“貪婪型”元字符,它們在進行匹配時會盡可能從一段文本的開頭一直匹配到這段文本的末尾,而不是碰到第一個匹配就結束。
那么這個時候就需要使用"懶惰型"。僅需在貪婪型元字符后加上?即可。如:*?,+?,{n,}?
位置匹配單詞邊界
B 非單詞邊界。查找前后都有多余空格的連字符。
^ 字符串開頭。出現在字符集合的外面且位于一個模式的開頭,^匹配字符串的開頭
$ 字符串結尾
Javascript中的正則表達式ECMAScript通過RegExp類型來支持正則表達式。
var expression = / pattern / flags;
其中pattern可以是任何簡單或復雜的正則表達式。
flags用來標明正則表達式的行為。如下所示:
g : 全局模式。模式應用于所有的字符串,不是在發現第一個匹配項后就立即停止的。
i : 不區分大小寫。正則表達式默認是區別大小寫的。i則是忽略大小寫
m : 表示多行模式,也就是說到達一行文本末尾的時候還會繼續查找下一行中是否存在與模式匹配的項。
創建正則表達式的方式以字面量形式來定義
var pattern = /sxj/i;
使用RegExp構造函數
var pattern = new RegExp("sxj", "i");
那么這兩種方式的區別除了形式不一樣,還有一個差別在于:
ECMAScript 3中,正則表達式字面量始終會共享同一個RegExp實例;而使用構造函數創建的每一個實例都是一個新實例。
不過!【敲黑板!】ECMAScript 5明確規定了,使用正則表達式字面量必須想直接調用RegExp構造函數一樣,每次都創建新的RegExp實例。而各大瀏覽器也對此進行了修改。
RegExp實例 實例屬性global: 布爾值,表示是否設置了g標志
ignoreCase: 布爾值,表示是否設置了i標志
multiline: 布爾值,表示是否設置了m標志
lastIndex:整數,表示開始搜索下一個匹配項的字符位置,從0開始。
source: 正則表達式的字符串表示。按照字面量形式返回。
實例方法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屬性在全局模式會增加,非全局模式始終不變。
pattern.test(text);
查看目標字符串與該模式是否匹配。匹配返回true,否則返回false。
String中的正則表達式text.match(pattern);
match匹配一個字符串和一個正則表達式。若沒有g標識,則結果與pattern.exec(text)相同。若有g標志,則返回一個包含所有匹配的數組。
text.search(pattern);
若找到匹配,返回第一個匹配的首字符位置。若沒有找到返回-1。
此方法會忽略g標識,且沒有position參數。
string.replace(searchValue, replaceValue);
searchValue可以是一個字符串或一個正則表達式對象。若是一個字符串,只會在第一次出現的地方被替換。若是一個正則表達式,若有g標志則替換所有匹配之處,若沒有則只替換第一個匹配之處。
總結正則表達式是個非常好用的工具,若掌握了可達到事半功倍的效果。好好學喲~
0-9 ?
a-zA-Z0-9_ ?
fnrtv ?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80072.html
閱讀 1208·2021-11-22 12:05
閱讀 1335·2021-09-29 09:35
閱讀 629·2019-08-30 15:55
閱讀 3122·2019-08-30 14:12
閱讀 954·2019-08-30 14:11
閱讀 2874·2019-08-30 13:10
閱讀 2400·2019-08-29 16:33
閱讀 3326·2019-08-29 11:02