2

为什么如果我添加/glineRoute parseRoute函数只返回一次?

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
4

1 回答 1

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

于 2012-08-27T11:01:20.547 回答