正则表达式 : how to eliminiate urls ending with . dtd

标签 regex

这是 JavaScript 正则表达式。

regex = /(http:\/\/[^\s]*)/g;

text = "I have http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd and I like http://google.com a lot";

matches = text.match(regex);

console.log(matches);

我在结果中得到了两个 url。但是我想消除所有以 .dtd 结尾的网址。我该怎么做?

请注意,我是说应该删除以 .dtd 结尾的文件。这意味着像 http://a.dtd.google.com 这样的 url应该通过。

最佳答案

最好的方法是使用负面回顾(在支持它们的语言中):

/(?>http:\/\/[^\s]*)(?<!\.dtd)/g

?>在第一个括号中使其成为一个停止正则表达式引擎回溯的原子分组 - 因此它将像现在一样匹配完整的 URL,并且如果/当下一部分失败时它不会尝试返回并匹配更少。

(<!\.dtd)是一个负面的回顾,只有在 \.dtd 时才匹配匹配以该位置结尾(即,URL 不以 .dtd 结尾)。

对于不这样做的语言(例如 JavaScript),您可以改为执行否定前瞻,这有点难看并且通常效率较低:

/(http:\/\/(?![^\s]*\.dtd\b)[^\s]*)/g

将匹配http:// , 然后向前扫描以确保它不以 .dtd 结尾,然后回溯并再次向前扫描以获得实际匹配项。

一如既往,http://www.regular-expressions.info/是获取更多信息的良好引用

关于正则表达式 : how to eliminiate urls ending with . dtd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2552927/

相关文章:

c# - 为什么输入字符串 "**$&"上的替换模式 "$1.30"返回一个前面有 "**"且输入字符串为 "after"的字符串?

python:在一个字符后拆分字符串

regex - 使用正则表达式匹配1到105之间的数字

python - 使用不同格式的正则表达式提取电话号码python

java - 模式匹配来检测单词中的特殊字符

regex - 使用正则表达式拆分后零件过多

javascript - 为什么这个正则表达式不排除连字符或括号?

javascript - express.js 路由解释

java - 在 Java 中解析标签的正则表达式

java - 无法解析变量。安卓正则表达式