作者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://webptt.com/cn.aspx?n=bbs/Ajax/M.1497111629.A.DBD.html
1F:推 LPH66: 嗯...match 如果用没有 /g 的 RegExp 回传的跟 exec 一样喔 06/11 14:43
2F:→ LPH66: 不过因为 exec 是 RegExp 的函数, 它可以去更改这个 RegExp 06/11 14:44
3F:→ LPH66: 的 lastIndex 属性, 所以才能在有 /g 之下用回圈全部抓出 06/11 14:44
4F:→ LPH66: 也因为这样, 属於字串的 match 函数不能动属性只好一次回传 06/11 14:45
5F:→ LPH66: match 是 Javascript 的四个 RegExp 比对函式里 06/11 14:46
6F:→ LPH66: 有没有 /g 结果差很多的一个; RegExp 的两个有没有 /g 就是 06/11 14:46
7F:→ LPH66: 能不能进行多笔比对, 剩下那一个则是没差 06/11 14:47
8F:推 s25g5d4: 在这里也能见到 LPH66 大大 06/12 02:08