使用或不使用/ g的正则表达式(CoffeeScript / JavaScript)

时间:2012-08-27 10:32:47

标签: javascript regex coffeescript

为什么我将/g添加到lineRoute 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

1 个答案:

答案 0 :(得分: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