Javascript 调整正则表达式以忽略链接HTML标记中的任何其他内容
我有一个正则表达式:Javascript 调整正则表达式以忽略链接HTML标记中的任何其他内容,javascript,html,regex,Javascript,Html,Regex,我有一个正则表达式: <a(?:.*)href="(.*)"(?:.*)>(.*)<\/a> (*) 到目前为止,我已经能够让它匹配HTML链接标签,其中有额外的属性。比如类和目标等等,这很有效 我现在想做的是调整它,使它匹配并忽略链接本身(如果有)中的任何其他标记,因为我只需要链接的文本和地址。我不确定这样做的最佳方法。始终使用DOM解析而不是正则表达式 这已被多次提出。根据对日益复杂的正则表达式形成的评论,只检查DOM会更容易。以以下为例: 函数fragment
<a(?:.*)href="(.*)"(?:.*)>(.*)<\/a>
(*)
到目前为止,我已经能够让它匹配HTML链接标签,其中有额外的属性。比如类和目标等等,这很有效
我现在想做的是调整它,使它匹配并忽略链接本身(如果有)中的任何其他标记,因为我只需要链接的文本和地址。我不确定这样做的最佳方法。始终使用DOM解析而不是正则表达式
这已被多次提出。根据对日益复杂的正则表达式形成的评论,只检查DOM会更容易。以以下为例:
函数fragmentFromString(strHTML){
返回document.createRange().createContextualFragment(strHTML);
}
让html=`“href=“testing.html”data id=“1”data popup text=“带我去”>测试这个`;
let fragment=fragmentFromString(html);
设aTags=Array.from(fragment.querySelectorAll('a');
aTags=aTags.map(a=>{
返回{
href:a.href,
text:a.textContent
}
});
console.log(aTags);
始终使用DOM解析而不是正则表达式
这已经被多次提出。根据对日益复杂的正则表达式形成的评论,只检查DOM会更容易。以下面的例子为例:
函数fragmentFromString(strHTML){
返回document.createRange().createContextualFragment(strHTML);
}
让html=`“href=“testing.html”data id=“1”data popup text=“带我去”>测试这个`;
let fragment=fragmentFromString(html);
设aTags=Array.from(fragment.querySelectorAll('a');
aTags=aTags.map(a=>{
返回{
href:a.href,
text:a.textContent
}
});
控制台日志(aTags)代码>可能是。这是为了对已知格式一致的固定输入数据集进行一次性快速攻击(即,属性周围的引号一致,没有嵌入属性内部的html,大小写一致等)?如果是这样,请将regexp删除。否则,使用DOM解析器,或者准备无限循环“发现另一个奇怪的边缘情况,使正则表达式更加复杂,以解决它,冲洗和重复”)。可能是这样。这是为了对已知格式一致的固定输入数据集进行快速一次性攻击吗(即围绕属性使用一致的引号,与嵌入在属性中的html无关,大小写一致等)?如果是这样,请删除regexp。否则,请使用DOM解析器,或准备无限循环“发现另一个奇怪的边缘大小写,使regex更加复杂,以解决它,冲洗并重复”)。也请查看@gabykag.Petrioli,很好,这当然比我的好,但是回到原来的问题,把>里的其他东西去掉怎么样(因为我只想要链接文本,而不是随机样式和应用于它的东西以及其他随机标记。@NoutySquid,您是在DOM中评估a
标记,还是从文本字符串中评估?@NoutySquid问题是,如果提供给正则表达式的文本不限于非常特定的规则,则正则表达式将无法处理任意输入s、 这就是为什么Scimonster对这个问题的评论如此高调的原因。看看这个@gabykag.Petrioli,好的catchWell,这肯定比我的好,但是回到最初的问题,在这里去掉>中的其他东西怎么样(因为我只想要链接文本,而不是随机样式和应用于它的东西以及其他随机标记。@NoutySquid,您是在DOM中评估a
标记,还是从文本字符串中评估?@NoutySquid问题是,如果提供给正则表达式的文本不限于非常特定的规则,则正则表达式将无法处理任意输入s、 这就是为什么Scimonester对这个问题的评论如此高调的原因。