Javascript 如何使用此代码计算链接数

Javascript 如何使用此代码计算链接数,javascript,jquery,regex,Javascript,Jquery,Regex,我无法显示文本区域中的链接数。。我使用以下代码: <script> $(function() { "use strict"; var url = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi; $("#textarea").on("keyup", function( e ) { var urls, outp

我无法显示文本区域中的链接数。。我使用以下代码:

<script>
$(function() {
    "use strict";
    var url = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi;

    $("#textarea").on("keyup", function( e ) {
        var urls, output = "";
        if ( e.keyCode !== 8 && e.keyCode !== 9 && e.keyCode !== 13 && e.keyCode !== 32 && e.keyCode !== 46 ) {
            // Return is backspace, tab, enter, space or delete was not pressed.
            return;
        }

        while ((urls = url.exec(this.value)) !== null) {
            output += urls[0] + ", ";
        }
        $("#result").html("URLS: " + output.substring(0, output.length - 2));
    });
});
</script>

<textarea id="textarea" style="height: 300px; width: 500px;"></textarea>
<div id="result"></div>
展示:

但我需要展示:

URLS: 2
我尝试:

$("#result").html("URLS: " + output.length);
但是获取URL的字母数


有人能帮我吗?thx如此之多

如果将
输出
设置为数组而不是字符串,则可以使用
长度
属性:

var输出=[]

while((url=url.exec(this.value))!==null){
output.push(URL[0]);
}

$(“#结果”).html(“URL:+output.length”)

“严格使用”;
变量url=/[-a-zA-Z0-9@:%\+.~#?&/=]{2256}.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%\+.~#?&/=]*)/gi;
document.querySelector('textarea')。addEventListener('keyup',函数(e){
var-url;
var输出=[];
如果(e.keyCode!==8&&e.keyCode!==9&&e.keyCode!==13&&e.keyCode!==32&&e.keyCode!==46){
//返回是未按backspace、tab、enter、space或delete键。
返回;
}
while((url=url.exec(this.value))!==null){
output.push(URL[0]);
}
document.querySelector(“#result”).innerHTML=“URL:+output.length;
});
textarea{
高度:100px;
宽度:400px;
}

可以使用变量i完成,在循环外用零初始化它。对于循环的每次迭代,i增加1

从以下位置更改代码:

$(function() {
"use strict";
var url = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi;

$("#textarea").on("keyup", function( e ) {
    var urls, output = "";
    if ( e.keyCode !== 8 && e.keyCode !== 9 && e.keyCode !== 13 && e.keyCode !== 32 && e.keyCode !== 46 ) {
        // Return is backspace, tab, enter, space or delete was not pressed.
        return;
    }

    while ((urls = url.exec(this.value)) !== null) {
        output += urls[0] + ", ";
    }
    $("#result").html("URLS: " + output.substring(0, output.length - 2));
});
}))

致:

}))


注意:如果需要,您仍然可以迭代匹配项。

diana,您是在查找所有URL组合的字符串长度还是URL的数量?请指定,谢谢.url.exec(this.value).length应该为您提供数字如果您需要查看多少个链接,为什么要将它们除以
?只需使用一个数组并将每个链接推到该数组中,然后使用
length
。您对字符串使用
length
,该字符串将返回该字符串中的字符数。
document.querySelector(“#result”)
如果您根据元素的唯一ID选择元素,为什么不使用
documentGetElementById
。@MihaiT,因为速度差非常小,您不会注意到它。如果选择getElementById,也意味着必须选择GetElementsByCassName和getElementsByTagName。并且仍然对3个找不到的选择器使用querySelector。因此,我更喜欢对所有内容始终使用querySelector和querySelectorAll,以便代码保持一致。2个不同的选择器函数与5个不同的选择器函数。在这种情况下,只要坚持使用
$(“#…
,因为OP已经在使用jquery。我可以,但我喜欢用纯JS回答,除非OP特别要求使用jquery(或她的库)版本,使我的答案不会在JQuery灭绝后过时。这也是向同事们展示如何在没有JQuery的情况下完成这些事情的一个好方法。虽然这段代码可能会回答这个问题,但提供关于如何和/或为什么解决问题的附加上下文将提高答案的长期价值。而不仅仅是“更改代码”,请添加一个小说明,例如“使用
this.value.match(url)
代替
url.exec
将返回可根据需要操作的数组”。
$("#result").html("URLS: " + output.length);
$(function() {
"use strict";
var url = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi;

$("#textarea").on("keyup", function( e ) {
    var urls, output = "";
    if ( e.keyCode !== 8 && e.keyCode !== 9 && e.keyCode !== 13 && e.keyCode !== 32 && e.keyCode !== 46 ) {
        // Return is backspace, tab, enter, space or delete was not pressed.
        return;
    }

    while ((urls = url.exec(this.value)) !== null) {
        output += urls[0] + ", ";
    }
    $("#result").html("URLS: " + output.substring(0, output.length - 2));
});
$(function() {
"use strict";
var url = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gmi;

$("#textarea").on("keyup", function( e ) {
    var urls, output = "";
    if ( e.keyCode !== 8 && e.keyCode !== 9 && e.keyCode !== 13 && e.keyCode !== 32 && e.keyCode !== 46 ) {
        // Return is backspace, tab, enter, space or delete was not pressed.
        return;
    }

  var urls = this.value.match(url);

  $("#result").html(urls.length);
});