Javascript 仅获取URL";href";从字符串

Javascript 仅获取URL";href";从字符串,javascript,Javascript,假设我的数据库中有一个字符串,如下所示: <a class=' text-info' href='description/Q0RFU0NJRDM=/Acetaminophen (Tylenol) Poisoning'&#47;>Acetaminophen (Tylenol) Poisoning<a &#47;> <a class=' text-info' href='description/Q0RFU0NJRDQ=/Achalasia'&#

假设我的数据库中有一个字符串,如下所示:

<a class=' text-info' href='description/Q0RFU0NJRDM=/Acetaminophen (Tylenol) Poisoning'&#47;>Acetaminophen (Tylenol) Poisoning<a &#47;>

<a class=' text-info' href='description/Q0RFU0NJRDQ=/Achalasia'&#47;>Achalasia<a &#47;>

如果它们位于HTML页面中:

var aList = document.querySelectorAll("a");
var aArray = Array.prototype.slice(aList, 0);
aArray.forEach(function(aElement){
    console.log(aElement.getAttribute('href'));
});
哦,在HTML页面中没有这些。因此,您基本上可以执行字符串操作:

databaseResults.forEach(function(databaseResult){
    var hrefValue = databaseResult.split(" ").filter(function(item){ return item.startsWith("href"); }).split("=")
    return hrefValue.substring(1, hrefValue.length - 1);
});

只需使用简单的正则表达式,如下所示:

var theString = "<a class=' text-info' href='description/Q0RFU0NJRDM=/Acetaminophen (Tylenol) Poisoning'&#47;>Acetaminophen (Tylenol) Poisoning<a &#47;>";
var exp = /href='(.+)'/g;
var match = exp.exec(theString);
console.log(match[0]); //outputs: description/Q0RFU0NJRDM=/Acetaminophen (Tylenol) Poisoning
var theString=“扑热息痛(泰诺)中毒”;
var exp=/href='(.+)'/g;
var match=exp.exec(字符串);
console.log(匹配[0])//输出:description/Q0RFU0NJRDM=/Acetaminophen(Tylenol)中毒
您可以执行以下操作: 这里的
coll
是DOM元素的非活动集合,是一种类似数组的结构,您可以在其上进行迭代。
var coll=document.querySelectorAll('.text info');
控制台日志(coll.length);

对于(var i=0;i,问题中的输入是否为
a
字符串或dom元素并不十分清楚:

如果它们是字符串,我们可以使用一个简单的正则表达式:
/href=([“|])(.*)\1/
, 在
href=
之后捕获
之间的任何内容。
var字符串=[
`扑热息痛(泰诺)中毒,
`贲门失弛缓症`
]
var url=strings.map(s=>{
return/href=([“|])(.*)\1/.exec[2];
})

console.log(url)
这是您的答案,它将只提供锚定标记HTMl中的url

var数据='扑热息痛(泰诺)中毒';
var subString='href=“”;
var endString='>';
var指数=1;
函数子字符串检查(数据、子字符串、结束字符串、索引){
var urlstart=data.split(子字符串,索引).join(子字符串).length;
var urlend=data.split(endString,index).join(endString).length;
var res=data.substring(urlstart+6,urlend-6);
返回res;
}
var结果=子字符串检查(数据、子字符串、结束字符串、索引);

console.log(result);
您可以获得如下URL: 首先,将锚点存储在一个数组中

urls  = ["<a class=' text-info' href='description/Q0RFU0NJRDM=/Acetaminophen (Tylenol) Poisoning'&#47;>Acetaminophen (Tylenol) Poisoning<a &#47;>",
"<a class=' text-info' href='description/Q0RFU0NJRDQ=/Achalasia'&#47;>Achalasia<a &#47;>"];
您可以迭代数组,创建一个临时div,并将锚点添加为innerHTML,以获取HTML元素并返回元素的href属性

片段

URL=[“扑热息痛(泰诺)中毒”,
“贲门失弛缓症”];
var\u url=url.map(函数(url){
var div=document.createElement('div');
div.innerHTML=url;
返回div.children[0].getAttribute('href');
});

console.log(_url)
你在网页上是否有字符串或
a
元素?为什么有人在数据库中保留html标记?为什么你会在数据库中保留html标记?你在html文档中有这些标记,对吗?可能是重复的,他说它们是数据库中的字符串;你的答案假设它们在DOM中。@Clonkex如果是这样,ho你的解决方案会有帮助吗?难道不应该在你的解决方案中编写一个查询而不是
console.log
?我已经问过他这个问题了!问题不是很清楚。我的解决方案假设他知道如何从数据库中获取数据,但不知道如何从字符串中提取子字符串。我对
console.log()的使用
是为了演示如何使用结果变量,这很常见。@Clonkex是的,假设!完全有可能他在DB中有这些标记,在服务器端读取并以html格式发送回浏览器。可能吗?@Clonkex不用担心!我也不是说你向我道歉。我只是想让我们两个都等着澄清因为我们都认为问题的结构很糟糕。顺便说一句,据我所知,将这些标签保存在DB中是不寻常的。所以我的假设(我认为这是公平的)是认为它在DOM中。:)我认为这不是他想要的。在您的示例中,字符串已经是他想要的部分。OP想知道如何从原始字符串(即
Acetaminophen(Tylenol)toxing
)中提取该部分(即
description/Q0RFU0NJRDM=/Acetaminophen(Tylenol)toxing
)。@Clonkex我已经更新了我的代码,以锚标记HTML作为输入,并给出所需的输出nice,现在看起来更好了。我认为OP被破坏了:p如果字符串在保存时没有经过消毒,那么可能会有被注入的风险。我认为字符串在存储到DB中之前经过消毒。@Mohamed Ted进一步说,节点没有附加到DOM中,它只是在内存中创建的,只是为了获取href属性。这是真的,我只是说这可能有潜在的风险
urls  = ["<a class=' text-info' href='description/Q0RFU0NJRDM=/Acetaminophen (Tylenol) Poisoning'&#47;>Acetaminophen (Tylenol) Poisoning<a &#47;>",
"<a class=' text-info' href='description/Q0RFU0NJRDQ=/Achalasia'&#47;>Achalasia<a &#47;>"];
var _urls = urls.map(function(url){
   var div = document.createElement('div');
   div.innerHTML =  url;
   return div.children[0].getAttribute('href');
});