1

我正在尝试在 javascript 中创建一个自动链接功能,该功能会在用户键入时自动将 url 转换为链接(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='... 

(我对正则表达式不是很方便)

4

1 回答 1

0

您只能匹配那些不以 a>或 a为前缀的 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"

于 2013-07-27T13:33:12.217 回答