2012-08-27 27 views
2

爲什麼如果我將/g添加到lineRouteparseRoute函數只返回一個出現?有或沒​​有/ g的正則表達式(CoffeeScript/JavaScript)

pkt = "Record-Route: <sip:10.1.20.40;lr;r2=on>\r\nRecord-Route: <sip:10.1.20.40:80;transport=ws;r2=on;lr=on>\r\n" 

parseRoute = (pkt) -> 
     lineRoute = /Route\:/ 
     route = "" 
     for line in pkt.split '\r\n' 
      if lineRoute.test line 
       tmp = line.split ': ' 
       route += tmp[1] + ", \r\n" 
     return route 

回答

1

當您重複使用RegEx對象時,每次調用test時都將從上一次匹配的索引開始。因此,在每次調用之間的測試,你必須重新設置該指標:

lineRoute.lastIndex = 0 

您的功能:

parseRoute = (pkt) -> 
    lineRoute = /Route\:/ 
    route = "" 
    for line in abc 
     lineRoute.lastIndex = 0; 
     if lineRoute.test line 
      tmp = line.split ': ' 
      route += tmp[1] + ", \r\n" 
    return route 

當全球標誌設置/g此屬性纔會被使用。這就解釋了爲什麼當你不使用全局標誌時它會起作用。

瞭解更多關於在這裏https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions(搜索lastIndex

+0

感謝。有用的信息。 – pamojarpan