Javascript JS函数卡在循环中

Javascript JS函数卡在循环中,javascript,Javascript,所以,这里是我的函数:它应该从输入中提取链接。(从http或类似的地方开始,然后在“”处结束)。问题是我无法调试这个函数的工作情况,因为它在循环中阻塞。我试着查了一下原因,还是说不出来 function linkify(input) { if (input === undefined || input == null) return input; var tinput = input; var urlextr = ""

所以,这里是我的函数:它应该从输入中提取链接。(从http或类似的地方开始,然后在“”处结束)。问题是我无法调试这个函数的工作情况,因为它在循环中阻塞。我试着查了一下原因,还是说不出来

 function linkify(input)
    {
        if (input === undefined || input == null)

        return input;

        var tinput = input;
        var urlextr = "";
        var url = [""];
        var num = 0;

        //search for "http://" first
        while(tinput.match(/http:\/\//gi) != null)
        {
            console.log("http");
            urlextr=tinput.substring(tinput.search("http://"));
            urlextr=urlextr.substring(0,urlextr.search(" "));
            url[num] = urlextr;
            url[num+1] = urlextr;
            num = num + 2;
            tinput = tinput.replace(urlextr,"");
        }

        //search for "https://"
        while(tinput.match(/https:\/\//gi) != null)
        {
            console.log("https");
            urlextr=tinput.substring(tinput.search("https://"));
            urlextr=urlextr.substring(0,urlextr.search(" "));
            url[num] = urlextr;
            url[num+1] = urlextr;
            num = num + 2;
            tinput = tinput.replace(urlextr,"");
        }

        //search for "ftp://" (Why not?)
        while(tinput.match(/ftp:\/\//gi) != null)
        {
            console.log("ftp");
            urlextr=tinput.substring(tinput.search("ftp://"));
            urlextr=urlextr.substring(0,urlextr.search(" "));
            url[num] = urlextr;
            url[num+1] = urlextr;
            num = num + 2;
            tinput = tinput.replace(urlextr,"");
        }

        //search for "www.*" (Must be last!)
        while(tinput.match(/www./gi) != null)
        {
            console.log("www");
            urlextr=tinput.substring(tinput.search("www."));
            urlextr=urlextr.substring(0,urlextr.search(" "));
            url[num] = urlextr;
            url[num+1] = urlextr;
            num = num + 2;
            tinput = tinput.replace(urlextr,"");
        }
        console.log(url);
        return output;
    }

我假设您有一个字符串,其中包含用空格分隔的不同URL。问题在于

urlextr=urlextr.substring(0,urlextr.search(" "));
如果您正在处理字符串中的最后一个
URL
,它将始终返回一个空字符串,从而使循环无限期运行。要解决这个问题,你可以做下面这样的事情

urlextr=tinput.substring(tinput.search("http://"));
urlextr=urlextr.substring(0,urlextr.search(" "));
if (!urlextr) {
    url[num] = tinput.trim();
    break;
}
url[num] = urlextr;
url[num+1] = urlextr;

我假设您有一个字符串,其中包含用空格分隔的不同URL。问题在于

urlextr=urlextr.substring(0,urlextr.search(" "));
如果您正在处理字符串中的最后一个
URL
,它将始终返回一个空字符串,从而使循环无限期运行。要解决这个问题,你可以做下面这样的事情

urlextr=tinput.substring(tinput.search("http://"));
urlextr=urlextr.substring(0,urlextr.search(" "));
if (!urlextr) {
    url[num] = tinput.trim();
    break;
}
url[num] = urlextr;
url[num+1] = urlextr;

不大可能发生的第二个使用html字符串。对我来说,它应该是:“随机消息和链接www.stackoverflow.com www.youtube.com等。”该函数将读取链接,然后在提取所有URL后更改链接。不使用任何其他JS。第二个使用html字符串。对我来说,它应该是:“随机消息和链接www.stackoverflow.com www.youtube.com等。”该函数将读取链接,然后在提取所有URL后更改链接。不使用任何其他有效的JSF,但它破坏了函数本身,因为数组有下一个顺序:每个偶数(0,2,4,6…)都有完整的URL,而每个奇数都有一个缩短的URL,或者用户是如何编写的。
URL[num]=urlextr;url[num+1]=urlextr在这里,您将为数组元素指定相同的值-您需要修复已修复的代码,感谢您的帮助。我已经想出了我的解决办法。所以函数完美地分离了工作的内容,但它破坏了函数本身,因为数组有下一个顺序:每个偶数(0,2,4,6…)都有完整的URL,而每个奇数都有一个缩短的URL,或者用户如何编写它;url[num+1]=urlextr在这里,您将为数组元素指定相同的值-您需要修复已修复的代码,感谢您的帮助。我已经想出了我的解决办法。所以函数完美地将事物分开