2017-02-23 32 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/

相關問題