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

Javascript 如何从链接中提取href属性并创建该属性的特定模式?,javascript,jquery,regex,url,Javascript,Jquery,Regex,Url,我用两个例子来解释我的问题: 示例1: 当前字符串: var str = 'anything <a href="www.google.com" target="_blank">untitled</a> anything'; // ^ link-name var str = 'anything <a href="www.google.com"

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

示例1:

当前字符串:

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

示例2:

当前字符串:

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

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

注意:模式=
[LinkName](LinkAddress)

我该怎么做


以下是我尝试过的:

var newStr = $('<div/>', {html: str}).find("a").replaceWith(function(){
  return $(this).attr('href'); // this.href would give absolute path
}).end().text();
var newStr=$('',{html:str}).find(“a”).replaceWith(函数(){
return$(this.attr('href');//this.href将给出绝对路径
}).end().text();

我的代码从所有类型的链接创建一个常规URL。我如何才能将该条件(检查链接名是否未命名)添加到该条件中?

我不明白。你所做的是对的。以下是您的解决方案,效果非常好:

$(函数(){
var str='任何东西';
var newStr=$('',{html:str}).find(“a”).replaceWith(函数(){
return($(this.text().trim().toLowerCase()=='untitled')?$(this.attr('href'):“[”+$(this.text()+“])(“+$(this.attr('href')+”)”);
}).end().text();
$(“正文”)。追加(newStr+“

”); str=‘任何事’; newStr=$('',{html:str}).find(“a”).replaceWith(函数(){ return($(this.text().trim().toLowerCase()=='untitled')?$(this.attr('href'):“[”+$(this.text()+“])(“+$(this.attr('href')+”)”); }).end().text(); $(“正文”).append(newStr); });
您只需检查元素的文本内容:

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();
var newStr=$(“”{
html:str
}).find(“a”).replacetwith(函数(){
变量
href=this.getAttribute('href'),
text=this.textContent
;
返回文本==='untitled'
?href
:“[“+text+”](“+href+”);
}).end().text();

输入字符串是否总是这么短?我认为不是,这是很重要的。你想解析整个html文档来做这件事吗?@Rafałużynski Yes and no。。。!很抱歉因为你的答案不是解决办法。这是一个变通办法。您已经将我的两个示例实现为静态。。!但是我需要一个动态代码来调查每个字符串的链接名的值(是否为
无标题
关键字)。@Shafizadeh您能进一步解释一下吗?我对解决这个问题很感兴趣。我想要这样的东西:
if(linkname=='untitled'){//regular URL}else{//patter-based-URL}
@Shafizadeh-Updated。请看上面的代码<代码>:)
看起来不错。但我不知道为什么在我的真实代码中不起作用。好吧,谢谢。我接受你的解决方案作为我的答案,如果我遇到关于它的问题,我会在以后问你。
:-)
哦,还有一件事,作为咨询:我愿意使用这个。现在我在我的代码中使用它,就像。我想知道的是,我的密码很好?在函数中定义对象是否已优化?或者我可以做得更好*(事先)谢谢。@Shafizadeh不客气。你的代码没有问题,它的性能对我来说很好。但是,您也可以在函数外部初始化实例。这是一个相关的问题: