iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 28
0
自我挑戰組

30 天 node.js 學習筆記系列 第 28

Day 28 Regex

正規式在 g 模式下,運作方式是從上一次的匹配結果位置 index(第一次為0) ,假如是2 再從 2 開始找,若是找不到匹配項目時,就會重置 匹配 index

 var filterArray = [

    "foobar",

    "foobaz",

    "foobuz",

    "foobix",

];

var result = filterArray.filter(/./.test.bind(new RegExp("foo", 'g')));

在一般模式它將被允許通過過濾器,但在g模式會從上一個匹配結果位置 開始找 EX: 第一個被匹配到位置是 2 ,但是下一個val是"foobaz"。搜索將從第四個字符 (index 3) 開始,而不是從第一個開始,所以"foo"不會被找到。

正則式本質是匹配相符的字串,也可透過一些特殊符號或表達式去當條件

為什麼非得用正則??用indexof找不好嗎?

因為文字太多種情狀了,若使用indexof無法應付多種情狀,每一種情狀就得做一次 indexOf 而正則式只需設定好一規則,

則都能匹配,方便許多

/.../g

g== 全域

i== 大小寫不區分

撰寫正則式時,js中正則式是不需向字串一樣雙引號

.萬用字元任何字除了 \n 換行都可

\t tab

\s 空白

\n 換行

\t tab

\w 數字、字母、底線

\跳脫字元

^ 匹配文字的開頭

$ 匹配文字的節尾

?匹配一次或0次通常用在判斷字串有無出現的情狀 ={0,1}

  • 不管幾次都可以

使用 * 字號不可只有一個字元必須要二個字以上的條件,因為只有一個字然後不管幾字都可以那 0 次也會被計算合法

所以每個字串都會被成立等於沒有條件

EX:

/hi*/g

hiiiiiii!!! javascript 會匹配到開頭是h然後i是不管幾次都可以

/i*/g

hiiiiiii!!! javascript 條件無限多不合法

  • , {1,} 一或一次以上

{1,5}最少一次最多5次

[a-zA-Z0-9] ==只要符合小寫a-z大寫A-Z數字0-9就是true

[^abc] 開頭不為abc

匹配字元的集合在裡面的字元都是或者的意思只要符合裡面任一字元就會被抓到

/aa|bb/ | 匹配或的條件EX:匹配aa or bb


上一篇
Day 27 Call , apply , bind
下一篇
Day 29 nvm 安裝設定
系列文
30 天 node.js 學習筆記30

尚未有邦友留言

立即登入留言