2017-02-23 30 views
-2

我想写一个脚本,将查找所有来自clyp,音频剪辑网站的链接。我对js很缺乏经验,所以如果我的代码很糟糕,请原谅我。替换()给出意想不到的结果

在我的例子中,无论我做什么,我都无法获得'code'变量来返回任何东西,即使它与'replace'变量具有相同的语法。

这是我到目前为止有:

体:

<div class="body"><a href="https://clyp.it/mo3nehzm" rel="nofollow" target="_blank">https://clyp.it/mo3nehzm</a></div> 

JS:

function clyp() { 
var length = document.getElementsByClassName("body").length 
for (i = 0; i < length; i++) { 
    var body = document.getElementsByClassName("body")[i]; 
    var body2 = body.innerHTML; 
    var code = body2.replace(/([>])(https:\/\/clyp.it\/)([\w]{8})/, "$3"); 
    var replace = body2.replace(/([>])(https:\/\/clyp.it\/)([\w]{8})/, "$1$2$3"); 
    body.innerHTML = replace.concat(code); 
} 
} 
clyp(); 

小提琴:

https://jsfiddle.net/mzrt/8zmuktey/

这不是最终产品。 js中的最后一行仅用于表明“代码”不返回任何内容。

感谢您的阅读和帮助。

回答

1

你更换产生的变量代码去掉了 “>” 封闭的锚标记声明。它应该看起来像:

var code = body2.replace(/([>])(https:\/\/clyp.it\/)([\w]{8})/, "$1$3") 
1

试试这个:

const clyp = data => data.replace(/(<a.*?>).*?https:\/\/clyp\.it\/(.*?)(<\/a>)/g, '$1$2$3') 
 

 
const clypAll = selector => { 
 
    const selected = document.querySelectorAll(selector) 
 
    for(let i = 0; i < selected.length; i++) { 
 
     selected[i].innerHTML = clyp(selected[i].innerHTML) 
 
    } 
 
} 
 

 
clypAll('.body')
<div class="body"><a href="https://clyp.it/mo3nehzm" rel="nofollow" target="_blank">https://clyp.it/mo3nehzm</a></div>

1

尝试查看由rendering包含HTML代码的HTML本身是一个坏主意,除非你总是要检查的源代码结果变量。

在你code变量,你真正得到这样的:

<a href="https://clyp.it/mo3nehzm" rel="nofollow" target="_blank"mo3nehzm</a> 

所以,你生成一个HTML标签,这不仅是无效的,但empty,所以什么也不显示。所以,你也看到这是你的$3的内容,这意味着你的正则表达式并不匹配,因为你期望它匹配。

因此,您需要用$1$3替换它以获得有效的HTML - 或者使用不同的正则表达式或不同的方法。

var code = body2.replace(/([>])(https:\/\/clyp.it\/)([\w]{8})/, "$1$3"); 

导致

<a href="https://clyp.it/mo3nehzm" rel="nofollow" target="_blank">mo3nehzm</a> 
1

如果你只是想收到的最后8个字符,你可以做到以下几点:

function clyp() { 
    var elements = document.getElementsByClassName("body"); 
    var regex = /href=.*clyp\.it\/(.*?)"/g; 
    for (i = 0; i < elements.length; i++) { 
     var innerHTML = elements[i].innerHTML; 
     var code = regex.exec(innerHTML)[1]; 
     document.body.innerHTML += code; 
    } 
} clyp(); 

https://jsfiddle.net/mzrt/8zmuktey/

相关问题