作者art1 (人,原來不是人)
看板Ajax
標題[ js ] 正規表達式 exec 跟 match 的差異
時間Sun Jun 11 00:20:24 2017
在
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
推 LPH66: 嗯...match 如果用沒有 /g 的 RegExp 回傳的跟 exec 一樣喔 06/11 14:43
→ LPH66: 不過因為 exec 是 RegExp 的函數, 它可以去更改這個 RegExp 06/11 14:44
→ LPH66: 的 lastIndex 屬性, 所以才能在有 /g 之下用迴圈全部抓出 06/11 14:44
→ LPH66: 也因為這樣, 屬於字串的 match 函數不能動屬性只好一次回傳 06/11 14:45
→ LPH66: match 是 Javascript 的四個 RegExp 比對函式裡 06/11 14:46
→ LPH66: 有沒有 /g 結果差很多的一個; RegExp 的兩個有沒有 /g 就是 06/11 14:46
→ LPH66: 能不能進行多筆比對, 剩下那一個則是沒差 06/11 14:47
推 s25g5d4: 在這裡也能見到 LPH66 大大 06/12 02:08