[ js ] 正規表達式 exec 跟 match 的差異

看板Ajax作者 (人,原來不是人)時間7年前 (2017/06/11 00:20), 編輯推噓2(206)
留言8則, 2人參與, 最新討論串1/1
http://regexr.com/ 網站練習正規表達式時很方便,開始用 js 測試時就傻了 一開始用 exec,結果想要的結果永遠只傳回第一筆,明明有加 gm 選項了 想說改用 match 看看,這次可以得到想要的筆數了,但沒仔細確認陣列內容 之後上網查兩個的差異,再比對兩個陣列的內容有什麼地方不一樣 才發現 exec 只會傳回一筆結果,但當正規表達式的規則內有用到 () 分組時, exec 傳回的結果才會保留 () 分組的資料,而 match 只會傳回相符的文字 所以會用到分組內的資料且需要比對多次時,須使用 exec 搭配迴圈來獲得所有結果 -- 新手上路 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.121.187.206 ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1497111629.A.DBD.html

06/11 14:43, , 1F
嗯...match 如果用沒有 /g 的 RegExp 回傳的跟 exec 一樣喔
06/11 14:43, 1F

06/11 14:44, , 2F
不過因為 exec 是 RegExp 的函數, 它可以去更改這個 RegExp
06/11 14:44, 2F

06/11 14:44, , 3F
的 lastIndex 屬性, 所以才能在有 /g 之下用迴圈全部抓出
06/11 14:44, 3F

06/11 14:45, , 4F
也因為這樣, 屬於字串的 match 函數不能動屬性只好一次回傳
06/11 14:45, 4F

06/11 14:46, , 5F
match 是 Javascript 的四個 RegExp 比對函式裡
06/11 14:46, 5F

06/11 14:46, , 6F
有沒有 /g 結果差很多的一個; RegExp 的兩個有沒有 /g 就是
06/11 14:46, 6F

06/11 14:47, , 7F
能不能進行多筆比對, 剩下那一個則是沒差
06/11 14:47, 7F

06/12 02:08, , 8F
在這裡也能見到 LPH66 大大
06/12 02:08, 8F
文章代碼(AID): #1PF1nDsz (Ajax)