javascript - 正则表达式在简短的副本中查找网址

标签 javascript regex

有了一份简短的副本,我需要匹配所有出现的网站链接。为了简单起见,需要找出这种格式的地址:

www.aaaaaa.bbbbbb
http://aaaaaa.bbbb
https://aa.bbbb

但我还需要处理更长的 www/http/https 版本:

www.aaaaa.bbbb.ccc.ddd.eeee

等等。所以基本上子域的数量是未知的。现在我想出了这个正则表达式:

(www\.([a-zA-Z0-9-_]|\.(?!\s))+)[\s|,|$]|(http(s)?:\/\/(?!\.)([a-zA-Z0-9-_]|\.(?!\s))+)[\s|,|$]

如果您测试:

this is some tex with www.somewIebsite.dfd.jhh.hjh inside of it or maybe http://www.ssss.com or maybe https://evenore.com hahaah blah

除了地址位于最后面之外,它工作正常。 $ 似乎仅在末尾有\n 时才起作用,并且失败:

this is some tex with www.somewIebsite.dfd.jhh.hjh

我猜修复很简单,但我错过了一些明显的东西,那么我该如何修复它呢?顺便说一句,如果你想快速玩一下,我在这里发布了正则表达式 https://regex101.com/r/eL1bI4/3

最佳答案

问题在于您将结束 anchor $ 放置在字符组 []

[\s|,|$]

然后它被字面解释为美元符号,而不是 anchor (管道字符 | 也被字面解释,那里不需要它)。解决方案是将 $ anchor 移到外面:

(?:[\s,]|$)

但是,在这种情况下,使用正向前瞻而不是非捕获组更有意义(您不需要尾随空格或逗号):

(?=[\s,]|$)

在结果中,您将得到以下正则表达式模式:

(www\.([a-zA-Z0-9-_]|\.(?!\s))+)(?=[\s,]|$)|(http(s)?:\/\/(?!\.)([a-zA-Z0-9-_]|\.(?!\s))+)(?=[\s,]|$)

参见the working demo .

处理尾随句号的更新版本:

(www\.([a-zA-Z0-9-_]|\.(?!\s|\.|$))+)(?=[\s,.]|$)|(http(s)?:\/\/(?!\.)([a-zA-Z0-9-_]|\.(?!\s|\.|$))+)(?=[\s,.]|$)

参见the working demo .

关于javascript - 正则表达式在简短的副本中查找网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31733069/

相关文章:

javascript - 对 Meteor.js 集合中的文档进行排序导致浏览器崩溃

python - 捕获组如何工作? (wrt python 正则表达式)

java - 提取不带小数的整数

c - 使用正则表达式以 UTF8 读写 C 中的文本文件

PHP - 这是允许用户提供正则表达式的安全方法吗

java - 将正则表达式应用于 SAX 流

javascript - 从指令到 Controller 共享数据

javascript - 通过重叠()进行碰撞检测在phaser.io中不起作用

javascript - 如果我在指令中使用 Controller ,如何从 ng-repeat 接收第一个元素?

javascript - 如何为特定节点编写条件 xpath 选择?