[心得] 如何以糟糕的正規表示式使 nodejs, firefox, IE應接不暇
看板RegExp (正規表示式 Regular Expression)作者colorless (colorless)時間9年前 (2015/03/08 21:37)推噓2(2推 0噓 9→)留言11則, 4人參與討論串1/1
二月底在做模板處理時,發現常常有 RegExp 卡住的狀況,之後發現有時是因為要跑很久。
在 node, firefox, IE 三大引擎上跑都一樣。
例如:
'012345678901234567890123456789;'.match(/^(?:[^;]*)*$/)
用人腦計算,這式子顯然匹配不出結果;但電腦似乎還沒足夠聰明?
前面數字多添一點,跑出結果的時間會變長許多(呈天文數字成長?)。
看來只要 pattern 寫得糟一點,確實是可能讓 regular expression engine 掛掉不動的。
不過同樣的式子,perl 的 engine 似乎就比較聰明,馬上就跑出來了。
至於其 workaround,只好放棄一次完成,採用一個個 match。
以上例而言,就是一次次 .match(/^[^;]*/),並偵測是否從頭到尾都符合,直到完成。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.173.96.149
※ 文章網址: https://www.ptt.cc/bbs/RegExp/M.1425821856.A.FFF.html
推
03/08 23:41, , 1F
03/08 23:41, 1F
→
03/09 00:14, , 2F
03/09 00:14, 2F
→
03/09 00:15, , 3F
03/09 00:15, 3F
→
03/09 00:16, , 4F
03/09 00:16, 4F
→
03/09 00:17, , 5F
03/09 00:17, 5F
→
03/09 21:30, , 6F
03/09 21:30, 6F
→
03/12 01:34, , 7F
03/12 01:34, 7F
→
03/12 01:35, , 8F
03/12 01:35, 8F
推
03/12 18:40, , 9F
03/12 18:40, 9F
→
03/12 18:41, , 10F
03/12 18:41, 10F
→
03/12 18:41, , 11F
03/12 18:41, 11F
RegExp 近期熱門文章
PTT數位生活區 即時熱門文章