如何使用jquery从链接中选择href属性?

时间:2015-12-17 15:42:22

标签: javascript jquery regex

我有一个这样的字符串:

var str = 'anything <span><a href="http://www.example.com/classname/methodname/arg1/arg2" target="_blank">...www.example.com/clas</a> </span> anything';

我想要这个输出:

var newstr: 'anything http://www.example.com/classname/methodname/arg1/arg2 anything';

我该怎么做?实际上我几乎可以使用多个str_replace()来做到这一点。但我想知道如何使用正则表达式来做到这一点?

str.str_replace('<span><a href="', '');
str.str_replace('" target="_blank">', '');
str.str_replace('</a> </span> ', '');

// output:
anything http://www.example.com/classname/methodname/arg1/arg2...www.example.com/clas anything

好吧,如您所见,我无法删除输出中的...www.example.com/clas

注意:示例中的 anything可以是任何单词/句子。顺便说一下,实际上有波斯人物。

编辑1:以下是一个示例:

我想替换它:

This <span><a href="www.example.com/classname/methodname/arg1/arg2/" target = "_blank"> ... www.example.com/clas</a> </span> is very good.

有了这个:

This www.example.com/classname/methodname/arg1/arg2/ is very good.

Edit2:此外,我需要该链接的值。像这样的模式:

[LinkName](LinkAddress)

注意:如果该链接的值不是“无标题”,我想创建上述模式。

例1:

var str = 'anything <span><a href="http://www.example.com/classname/methodname/arg1/arg2" target="_blank">website name</a> </span> anything';

我想要这个:

var newstr: 'anything [website name](http://www.example.com/classname/methodname/arg1/arg2 anything)';

示例2:

var str = 'anything <span><a href="http://www.example.com/classname/methodname/arg1/arg2" target="_blank">untitled</a> </span> anything';

我想要这个:

var newstr: 'anything http://www.example.com/classname/methodname/arg1/arg2 anything';

2 个答案:

答案 0 :(得分:6)

您可以将str包装在DOM元素中,找到任何锚标记,将其替换为自己的href属性,然后返回新字符串:

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

var str = 'anything <span><a href="http://www.example.com/classname/methodname/arg1/arg2" target="_blank">...www.example.com/clas</a> </span> anything';

var newStr = $('<div/>', {html: str}).find("a").replaceWith(function(){
  return $(this).attr('href');
}).end().text();
console.log(newStr);
$('body').append(newStr);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

答案 1 :(得分:1)

如果您的文字总是不同,您应该坚持Gen4tiks的答案。 但是,如果句子的规则始终与上面描述的方式相同,则可以使用解释here的regex.split方法并定义适合您需要的正则表达式。以下是一个工作但非常愚蠢的正则表达式,可以满足您的需求,但对于任何其他用例都是无用的。我只是用它来解释你如何使用正则表达式:

var split = str.split(split(/(<\/*[a-zA-Z0-9=\\]+>)|(href=")|(target)/)
//split: ["anything interesting ", "<span>", undefined, undefined, "<a ", undefined, "href="", undefined, "http://www.example.com/classname/methodname/arg1/arg2" ", undefined, undefined, "target", "="_blank">...www.example.com/clas", "</a>", undefined, undefined, " ", "</span>", undefined, undefined, " anything else"]
var output = match[0] + match[(match.indexOf('href="')+2)] + match[match.length-1]
//output: "anything interesting http://www.example.com/classname/methodname/arg1/arg2"  anything else"
  • /定义正则表达式的开头和结尾
  • |定义了何时进行拆分的不同选项
  • 每个html标记的<\/*[a-zA-Z0-9=\\]+>拆分
  • (href=")用于稍后查找正确的索引(对于您要显示的链接)
  • target将字符串拆分为html的“target”属性的位置(您不希望在输出中包含该字符串)

希望有所帮助!