[Regexp] 正規表示法基本用法 - Medium

文章推薦指數: 80 %
投票人數:10人

是電腦科學的一個概念。

正規表示式使用單個字串來描述、匹配一系列符合某個句法規則的字串。

在很多文字編輯器裡,正規表達式通常被用來檢索、替換 ... GetunlimitedaccessOpeninappHomeNotificationsListsStoriesWritePublishedinJoeLifeStory[Regexp]正規表示法基本用法是電腦科學的一個概念。

正規表示式使用單個字串來描述、匹配一系列符合某個句法規則的字串。

在很多文字編輯器裡,正規表達式通常被用來檢索、替換那些符合某個模式的文字。

在JavaScript中,正規表達式也是物件,這些模式在RegExp的exec和test方法中,以及String的match、replace、search、split等方法中被運用。

這邊先介紹單純的種類一:字元、特殊字元選取普通字元[]選取多個字元、[]選取範圍字元[^]過濾特定字元選取特殊字元\:為跳脫字元,可以用在+-*/.%()[]{}之類的符號,需用\跳脫EX:若要比對1+2=3可用\+,\=將+及=符號跳脫上述除了基本字元外,當使用者想要比對0–9的數字或者是A-Z時,不可能將英文符號或者是0–9都打上去,於是有了縮寫符號種類二:錨點符號/^/字句的開頭包含換行的開頭/$/字句的結尾包含換行的結尾/\b/wordboundary字元的「前面」或「後面」除了空白字元(whitespace)、標點符號(punctuation)或字串開頭或結尾外不可再有其它字元/\B/not-wordboundary字串開頭或結尾外有其它字元補充:對於位子的補充知乎正規表示法教學補充位子定義^和$^(脱字符)匹配开头,在多行匹配中匹配行开头。

$(美元符号)匹配结尾,在多行匹配中匹配行结尾。

比如我们把字符串的开头和结尾用"#"替换(位置可以替换成字符的!):varresult="hello".replace(/^|$/g,'#');console.log(result);//"#hello#"多行匹配模式时,二者是行的概念,这个需要我们的注意:varresult="I\nlove\njavascript".replace(/^|$/gm,'#');console.log(result);/*#I##love##javascript#*/\b和\B\b是单词边界,具体就是\w和\W之间的位置,也包括\w和^之间的位置,也包括\w和$之间的位置。

比如一个文件名是"[JS]Lesson_01.mp4"中的\b,如下:varresult="[JS]Lesson_01.mp4".replace(/\b/g,'#');console.log(result);//"[#JS#]#Lesson_01#.#mp4#"首先,我们知道,\w是字符组[0-9a-zA-Z_]的简写形式,即\w是字母数字或者下划线的中任何一个字符。

而\W是排除字符组[^0-9a-zA-Z_]的简写形式,即\W是\w以外的任何一个字符。

此时我们可以看看"[#JS#]#Lesson_01#.#mp4#"中的每一个"#",是怎么来的。

第一个"#",两边是"["与"J",是\W和\w之间的位置。

第二个"#",两边是"S"与"]",也就是\w和\W之间的位置。

第三个"#",两边是空格与"L",也就是\W和\w之间的位置。

第四个"#",两边是"1"与".",也就是\w和\W之间的位置。

第五个"#",两边是"."与"m",也就是\W和\w之间的位置。

第六个"#",其对应的位置是结尾,但其前面的字符"4"是\w,即\w和$之间的位置。

知道了\b的概念后,那么\B也就相对好理解了。

\B就是\b的反面的意思,非单词边界。

例如在字符串中所有位置中,扣掉\b,剩下的都是\B的。

種類三:量詞各種範例:再JS30days第六天的題目需要使用正規表示法來判斷三位數給一個區別JS30days的千分位表示法方法一:vara=1123456789;varreg=/\B(?=(\d{3})+(?!\d))/g;a.toString().replace(reg,',');//1,123,456,789第一步:先判斷\B是否成立第二步:判斷(?=(/d{3})+(?!\b))是否成立(/d{3})+=>數字為3碼並且至少有一組以上(?!\d)=>不等於數字[0-9]則成立將上述組合再一起為當數字為3碼並至少有一組以上且後面不等於數字則成立條件這個意思為至少1組以上且後面不行為數字,則會限制將必定為固定為3個一組知乎的千分位表示法為方法二:vara=123456789;varreg=/(?=(\d{3})+$)/ga.toString().replace(reg,',');//,123,456,789上述這樣子最初的方法會在剛好符合3個一組時的時候造成問題作者為了解決問題,會額外加上判斷varreg=/(?!^)(?=(\d{3})+$)/ga.toString().replace(reg,',');//123,456,789(?!^)=>不等於開頭則符合條件,亦可以用\B來代替台灣身分證:因為是固定格式開頭為英文後九碼為數字共十位數Ex:H123456789,A123456789reg=/^[A-Z]\d{9}$/g台灣行動電話:電話號碼也是固定十碼,開頭則為09EX:0912345678,0944332211reg=/^09/d{8}$/西元生日格式分兩種EX:varbirthday=2020/01/20;varbirthday2=2020/12/08;reg=/(\d{4})\/([0-1]?\d)\/([0-3]?\d)/如果想要替換西元格式的話2020/01/20=>2020-01-20or2020,01,20替換如下birthday.replace(reg,'$1-$2-$3');//2020-01-20birthday.replace(reg,'$1,$2,$3');//2020,01,20gmail信箱Ex:[email protected]=/^\w+@gmail\.com$/再function中需要做成建構子的話,可以使用newRegExp()創建實例來用若是再程式中只單純判斷可以直接寫判斷式,減少程式負擔。

資料來源:Youtube—[線上讀書會]承億主講regularexpression知乎—正規表示學習系列測試網站:regexrregexper--MorefromJoeLifeStory生活/旅遊/程式/心得/美食ReadmorefromJoeLifeStoryAboutHelpTermsPrivacyGettheMediumappGetstartedShi-Xun2FollowersFollowMorefromMediumAshleyNguyenDecisions…DecisionsStevenBatesonBifurcationOne:chapterfourAvaBrewerinAva’sBCABlogInPhotos:CentralMichiganUniversity’sNorthCommunitytobetemporarilyofflineforfall2022ysyms希望plug钱包支持互联网身份登录(bilingual)HelpStatusWritersBlogCareersPrivacyTermsAboutKnowable



請為這篇文章評分?