javascript 自动链接 url 但避免递归

标签 javascript jquery contenteditable autolink

我正在尝试在 javascript 中创建自动链接功能,当用户键入 (ContentEditable div) 时,该功能会自动将网址转换为链接。

我使用这个正则表达式:

var text = 'Some text containing URLs';
var exp = /(\b(http):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
var newtext = text.replace(exp,"<a href='$1'>$1</a>");

上面的代码工作正常,但由于每次用户键入时都会调用该代码,因此会发生递归:

<a href='<a href='<a href=' etc.

如何避免这种情况发生,同时仍让脚本在用户键入时更新文本?

所以问题是(感谢@putvande):如何检查 URL 是否不包含:

<a href='... 

(我不太擅长正则表达式)

最佳答案

您只能匹配那些不以 > 为前缀的 URL 模式。或' 。虽然这可能不是 100% 万无一失,但它应该足以帮助您入门。

function urlify(text) {
    var exp = /^\>(\b(http):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
    return text.replace(exp,"<a href='$1'>$1</a>");
}

调用时:

urlify('Some text http://example.com containing URLs');

返回"Some text <a href='http://example.com'>http://example.com</a> containing URLs"

urlify("Some text <a href='http://example.com'>http://example.com</a> containing URLs");

返回"Some text <a href='http://example.com'>http://example.com</a> containing URLs"

关于javascript 自动链接 url 但避免递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17898187/

相关文章:

javascript - 如何在普通 ES5 (Javascript) 中向 Angular 组件注入(inject)自定义服务?

javascript - 如何从 javascript 文件中点击 Controller 操作方法

javascript - 具有多个字段的 contenteditable 和 localstorage 的问题

javascript - 在 contenteditable 中禁用 IE 8-11 中的 (img) 调整大小句柄,并尽可能删除它们

javascript - 使用 JavaScript 查找关联数组中的键

javascript - DHTMLX 网格过滤器重置后初始化延迟

javascript - 创建指向谷歌地图上特定标记的链接

javascript - 将图像文件拖放到 contenteditable div : works fine in FF, 在 Chrome 中失败得很惨

javascript - Angular 树组件不工作

javascript - 如何在 if 语句中仅在范围内运行警报一次?