如何从链接中提取href属性并创建一个特定的模式?

时间:2015-12-22 11:55:53

标签: javascript jquery regex url

我用两个例子解释我的问题:

例1:

当前字符串:

var str = 'anything <a href="www.google.com" target="_blank">untitled</a> anything';
//                                                               ^ link-name

我想要这个字符串:

var newstr = 'anything www.google.com anything';

例2:

当前字符串:

var str = 'anything <a href="www.google.com" target="_blank">any thing else</a> anything';
//                                                                  ^ link-name

我想要这个字符串:

var str = 'anything [any thing else](www.google.com) anything';

正如您在上面的两个示例中所看到的,untitled是一个关键字。我想如果链接名称是untitled,那么创建一个常规URL,但如果不是,则创建一个基于模式的URL。

注意: pattern = [LinkName](LinkAddress)

我该怎么做?

这也是我的尝试:

var newStr = $('<div/>', {html: str}).find("a").replaceWith(function(){
  return $(this).attr('href'); // this.href would give absolute path
}).end().text();

我的代码会根据所有类型的链接创建常规网址。如何添加条件(检查是否为untitled的链接名称)?

2 个答案:

答案 0 :(得分:1)

我不明白。你做的是对的。以下是您的解决方案完美无缺:

&#13;
&#13;
$(function () {
  var str = 'anything <a href="www.google.com" target="_blank">untitled</a> anything';
  var newStr = $('<div/>', {html: str}).find("a").replaceWith(function(){
    return ($(this).text().trim().toLowerCase() == 'untitled') ? $(this).attr('href') : "[" + $(this).text() + "](" + $(this).attr('href') + ")";
  }).end().text();
  $("body").append(newStr + "<br /><br />");
  str = 'anything <a href="www.google.com" target="_blank">any thing else</a> anything';
  newStr = $('<div/>', {html: str}).find("a").replaceWith(function(){
    return ($(this).text().trim().toLowerCase() == 'untitled') ? $(this).attr('href') : "[" + $(this).text() + "](" + $(this).attr('href') + ")";
  }).end().text();
  $("body").append(newStr);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

更新的代码(更好的版本)

&#13;
&#13;
$(function () {
  var str = 'anything <a href="www.google.com" target="_blank">untitled</a> anything';
  var newStr = string_it(str);
  $("body").append(newStr + "<br /><br />");
  str = 'anything <a href="www.google.com" target="_blank">any thing else</a> anything';
  newStr = string_it(str);
  $("body").append(newStr);
});

function string_it (str) {
  return $('<div/>', {html: str}).find("a").replaceWith(function(){
    return ($(this).text().trim().toLowerCase() == 'untitled') ? $(this).attr('href') : "[" + $(this).text() + "](" + $(this).attr('href') + ")";
  }).end().text();
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您只需要检查元素的文本内容:

var newStr = $('<div/>', {
  html: str
}).find("a").replaceWith(function() {
  var
    href = this.getAttribute('href'),
    text = this.textContent
  ;

  return text === 'untitled' 
         ? href 
         : "[" + text + "](" + href + ")";

}).end().text();