Javascript 检测Textarea中的URL-不查找正则表达式

Javascript 检测Textarea中的URL-不查找正则表达式,javascript,Javascript,我试图限制一个人可以添加到文本区域的URL的数量。我有一个正则表达式,可以找到所有的网址刚刚好。以下是我遇到的问题: 当两个链接紧挨着彼此,但被空格隔开时,我编写的代码将无法识别第二个链接。如果我用两个空格分隔它们,那么它们将被识别。我不知道这里发生了什么 函数limitLinks(){ var计数器=0; (a-a-z[a-z[a-z[a-z[a-z[[[w-[w-[[[w-[[[w-[[a-z0-10-z0-9%[a-a-z[a-a-z[a-z[a-z[a-z[a-z[a-z[a-z[a-

我试图限制一个人可以添加到文本区域的URL的数量。我有一个正则表达式,可以找到所有的网址刚刚好。以下是我遇到的问题:

当两个链接紧挨着彼此,但被空格隔开时,我编写的代码将无法识别第二个链接。如果我用两个空格分隔它们,那么它们将被识别。我不知道这里发生了什么

函数limitLinks(){
var计数器=0;
(a-a-z[a-z[a-z[a-z[a-z[[[w-[w-[[[w-[[[w-[[a-z0-10-z0-9%[a-a-z[a-a-z[a-z[a-z[a-z[a-z[a-z[a-z[a-z[[a-z[a-z[[[[a-z[a-z[a-z[a-z[a-z[[[[[[a-z[a-z[[[a-z[[[[[a-z[[[[[a-z[[[[[[a-z[[[[[[[[a-z[[[[[[[[[[[[[[[[[[[[[[w----[w-[w-[w-[w-[[[[[[[[[[[[[[[w----[\[\]{};:\'\''\.\,?«»'''''']){0,})/ig;
var sig=$(“.textarea”).val();
var sigsplit=sig.replace(/\n/g,“”).split(“”);
var-links=[];
对于(var i=0;i

foo.com酒吧

通过进一步的研究,这个问题是重复的。但我将把这个问题作为我的笔记保存在这里


你的正则表达式似乎有某种“记忆”

看看这个:

var url = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/?)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\)){0,}(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s\!()\[\]{};:\'\"\.\,<>?«»“”‘’]){0,})/ig;

function isLink(str) {
  return url.test(str);
}

console.log('odd.com even.com odd.com even.com odd.com'.split(' ').filter(isLink));
它返回
[“odd.com”、“偶数.com”、“odd.com”、“偶数.com”、“odd.com”]

迷人吧?你的正则表达式有些地方导致它在执行之间的行为不同。通过在每次函数调用时重新实例化正则表达式,它会重置内存。非常奇怪

为了解决这个问题,我删除了末尾的
g
标志


下面是一个更小的可复制示例:

var re = /a./g;
console.log('a1 a2 a3 a4 a5 a6'.split(' ').filter(s => re.test(s)));
// returns ["a1", "a3", "a5"]

删除
g
标志返回
[“a1”、“a2”、“a3”、“a4”、“a5”、“a6”]

进一步研究后,这个问题是重复的。但我将在这里保留这个问题,作为我的笔记


你的正则表达式似乎有某种“记忆”

看看这个:

var url = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/?)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\)){0,}(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s\!()\[\]{};:\'\"\.\,<>?«»“”‘’]){0,})/ig;

function isLink(str) {
  return url.test(str);
}

console.log('odd.com even.com odd.com even.com odd.com'.split(' ').filter(isLink));
它返回
[“odd.com”、“偶数.com”、“odd.com”、“偶数.com”、“odd.com”]

迷人吧?你的正则表达式有些地方导致它在执行之间的行为不同。通过在每次函数调用时重新实例化正则表达式,它会重置内存。非常奇怪

为了解决这个问题,我删除了末尾的
g
标志


下面是一个更小的可复制示例:

var re = /a./g;
console.log('a1 a2 a3 a4 a5 a6'.split(' ').filter(s => re.test(s)));
// returns ["a1", "a3", "a5"]

删除
g
标志返回
[“a1”、“a2”、“a3”、“a4”、“a5”、“a6”]

是的,当你使用
g
标志时,它会让regexp保留内存,这样你就可以在循环中使用它来查找所有匹配项。每次你使用它时,它都从上次结束的地方开始。啊,这毕竟是一个regex问题!叹气。谢谢你的帮助!我知道这必须是一个简单的答案…确实如此。谢谢!是的,when你使用
g
标志,它使regexp保留内存,因此你可以在循环中使用它来查找所有匹配项。每次使用它时,它都从上次结束的地方开始。啊,这毕竟是一个regex问题!叹气。谢谢你的帮助!我知道这必须是一个简单的答案…确实如此。谢谢!