排除具有自动链接器的特定链接.js

Excluding a specific link with Autolinker.js

本文关键字:链接 js 排除      更新时间:2023-09-26

我正在使用自动链接器.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链接两个 URL。我尝试使用

var options = {urls: { schemeMatches: true, wwwMatches: true, tldMatches: false }};
var linkedText = Autolinker.link(formInput, options);

但这消除了google.com上的链接以及example.com,同时保持www.kbb.com链接。

基本上我只想排除一个特定的 url,即 example.com ,从链接中。

抱歉,我刚刚注意到了这个线程。我是图书馆的作者。我知道已经很晚了,但把这个回复留给遇到它的人。

从自动链接中排除特定 URL 的最简单方法是利用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

用标记替换文本,运行自动链接,将标记替换为原始文本。这里明显的弱点是,如果表单输入包含 ||任何||它会破裂。

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>

所以我写了一个函数来包装自动链接器:

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);