最近發現自己還滿常用到正規表達式的,每次都是上網找然後複製貼上,因為看起來像亂碼一樣每次看都覺得頭痛,今天就參考MDN來學習一下,放在這裡讓自己以後都可以查。
寫法
const regExp = / regExp /
用兩個斜線包住
或是使用正規表達式的建構函式
const regExp = new RegExp("regexp")
簡易模式
找到的直接匹配所構成的,也就是結果會完全匹配要搜尋的字串
例:尋找abc
“Let’s sing abc song!” “grab crab”
要尋找”abc”時,第一個句子會匹配成功,因為在這個句子中有abc,沒有斷開也沒有順序不同,第二句就不會匹配成功, 因為在這裡雖然也包含abc三個字母, 但a和b被一個空白字元分開了 (ab c)
符號
若是我們需要更複雜的搜索條件,例如:我們想要確認使用者輸入的email是否符合格式,或是搜尋一個字串中所有包含b的單字,就必須使用一些特殊符號
符號 | 解釋 | 例子 |
---|---|---|
\ | 反斜線會搭配一些字母用在正規表達式的一些符號中, 但是當你想要搜尋的字剛好屬於正規表達式的特殊符號時, 可以將反斜線放在特殊符號前面, 讓它不會被視作特殊符號 | a* 表示一個字串中包含0至多個a, 但a*僅代表字面意義上的a* (米字號因為反斜線而被以字面意義解釋了) |
a* | 表示一個字串中包含0至多個a,即使沒有a這個字元也會匹配 | (/a*/).test(‘bbbb’) => true |
a+ | 表示一個字串中包含1至多個a | (/a+/).test(‘bbbb’) =>false |
^a | 匹配開頭符合a的字串 | (/^a/).test(“ant”) => true |
a$ | 匹配結尾符合a的字串 | (/a$/).test(‘tesla’) =>true |
a{num} | 尋找連續出現num次的a, num為正整數, 要注意若是a出現次數大於num, 還是會算做true | (/a{2}/).test(“area”) => false (/a{2}/).test(“aah”) =>true (/a{2}/).test(“aaaaah”) =>true |
a{min, max} | 尋找連續出現至少min次, 至多max次的a, 跟上一條一樣的是, 要注意若是a出現次數大於max, 還是會算做true | |
[a-z] | 尋找界在a~z之間的所有字母 | (/[a-z]/).test(‘abc’) =>true (/[a-z]/).test(‘ABC’)=> false |
\ba | 若斜線與b搭在一起時, 放在a前面時, 表示a前面沒有別的字元, 也就是說以a開頭, 若是放在a的後面, 表示a的後面沒有別的字元, 也就是以a結尾 | (/\ba/).test(‘bag’) => false (/\ba/).test(‘apple’) => true (/a\b/).test(‘apple’) => false |
\d | 數字, 等同[0-9] | (/\d/).test(‘123’) =>true |
\D | 非數字 | |
\w | 數字字母和底線 | |
\W | 非數字字母和底線, 例如: %, *這些符號 |
Flags 模式
模式 | 解釋 |
---|---|
/reg/g | g代表global search, 表示搜索指定字串中的全部字元 |
/reg/i | insensitive search 忽略大小寫 (/abc/i).test(‘ABC’) =>true |
常見用法
說明 | 表達式 |
---|---|
只能輸入文字或數字 | /^[a-zA-Z0-9]*$/ |
只能輸入文字 | /^[a-zA-Z]*$/ |
只能有數字 | /^[0-9]*$/ |