我正在尝试编写一个脚本,它将从clyp(一个音频剪辑网站)中找到所有链接。我对js很缺乏经验,所以如果我的代码很糟糕,请原谅我。
在我的例子中,无论我做什么,我都无法得到代码'变量返回任何内容,即使它与'替换'具有相同的语法。变量
这是我到目前为止所做的:
体:
<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中的最后一行仅用于显示&#39;代码&#39;没有回来任何东西。
感谢您的阅读和帮助。
答案 0 :(得分: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 :(得分:1)
生成变量代码的替换语句正在删除&#34;&gt;&#34;关闭锚标签。它应该看起来像:
var code = body2.replace(/([>])(https:\/\/clyp.it\/)([\w]{8})/, "$1$3")
答案 2 :(得分:1)
尝试查看包含html标签的结果变量rendering
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>
答案 3 :(得分: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();