排除与Autolinker.js的特定链接

时间:2016-02-01 16:30:55

标签: javascript autolinker.js

我正在使用Autolinker.js关联从表单输入的文字,但我想排除example.com被链接。

var formInput = "Don't link example.com but link google.com and www.kbb.com please";
var linkedText = Autolinker.link(formInput);

自然地产生linkedText并且两个网址都链接在一起。我尝试使用

更改网址选项
var options = {urls: { schemeMatches: true, wwwMatches: true, tldMatches: false }};
var linkedText = Autolinker.link(formInput, options);

但这会消除google.com上的链接以及example.comwww.kbb.com关联的链接。

基本上我只想排除一个特定的网址,即example.com

3 个答案:

答案 0 :(得分:2)

对不起,我刚刚注意到此线程。我是图书馆作者。我知道已经很晚了,但是将回复留给遇到它的任何人。

排除特定网址自动链接的最简单方法是利用replaceFn选项。例如:

var formInput = "Don't link example.com but link google.com and www.kbb.com please";

var linkedText = Autolinker.link( formInput, {
    replaceFn: function( match ) {
        if( match.getType() === 'url' ) {
            var url = match.getUrl();

            if( url.indexOf( 'example.com' ) !== -1 ) {
                return false;  // don't autolink matches for example.com
            }
        }

        return true;  // autolink everything else as usual
    }
} );

这将产生以下结果:

Don't link example.com but link <a href="http://google.com" target="_blank" rel="noopener noreferrer">google.com</a> and <a href="http://www.kbb.com" target="_blank" rel="noopener noreferrer">kbb.com</a> please

以下是有关可以在UrlMatch个对象上调用的方法的一些文档:http://greg-jacobs.com/Autolinker.js/api/#!/api/Autolinker.match.Url

还有使用replaceFn的更深入的示例:https://github.com/gregjacobs/Autolinker.js#custom-replacement-function

答案 1 :(得分:1)

用令牌替换文本,运行自动链接,用原始文本替换令牌。这里明显的弱点是,如果formInput包含|| 任何 ||它会破裂。

var formInput = "Don't link example.com but link google.com and www.kbb.com please";

var stuffIdontwanttolink = ['example.com', 'google.com'];

stuffIdontwanttolink.forEach(function(entry, index) {
  formInput = formInput.replace(entry, '||' + index + '||');
});

console.log(formInput);

//var linkedText = Autolinker.link(formInput);
var linkedText = "Don't link ||0|| but link ||1|| and <a href='//www.kbb.com'>www.kbb.com</a> please"; // Simulated

stuffIdontwanttolink.forEach(function(entry, index) {
  linkedText = linkedText.replace('||' + index + '||', entry);
});

console.log(linkedText);
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>

答案 2 :(得分:1)

所以我编写了一个函数来封装Autolinker:

function excludedLinkify (inputText) {
  var exclusions = [
    {url:'example.com', temp:'7g578v43gc7n3744c'}
  ];
  $.each(exclusions, function (i, e) {
    inputText = inputText.replace(e.url, e.temp);
  });
  inputText = Autolinker.link(inputText);
  $.each(exclusions, function (i, e) {
    inputText = inputText.replace(e.temp, e.url);
  });
  return inputText;
}

为了达到理想的效果,我现在可以

var formInput = "Don't link example.com but link google.com and www.kbb.com please";
var linkedText = excludedLinkify(formInput);