正则表达式从 HTML 内容解析哈希 URL



我有正则表达式来解析HTML内容中的所有哈希网址。

/(#)([^s]+")/g

HTML 内容将作为

Some text <a href="#some-hash1">some link</a>some content <a href="#some-hash2">some link1</a>

预期为

#some-hash1, #some-hash2

但是当前的正则表达式返回为(结尾双精度与哈希一起(:

#some-hash1", #some-hash2"

我不明白为什么它带有双引号。任何建议都会非常有帮助。

我不会为此使用正则表达式,因为它矫枉过正正,而且因为您可以简单地遍历锚点来拉动其 href 的值......

var anchors = document.querySelectorAll('a');
var hrefs = [];
anchors.forEach(function(e){
	hrefs.push(e.getAttribute('href'));
});
console.log(hrefs);
<a href="link 1">link 1</a>
<a href="link 2">link 2</a>

使用非捕获括号,

/(#)([^s]+(?="))/g

演示

 var z = 'Some text <a href="#some-hash1">some link</a>some content <a href="#some-hash2">some link1</a>';
console.log(    z.match(/(#)([^s]+(?="))/g) );

只需将双引号移出括号:

(#)([^s]+)"

查看其工作原理:https://regex101.com/r/fmrDyu/1

我假设您正在查看结果的 2 美元内容。

如果是这样,则问题出在第二个捕获组内。将/(#)([^s]+")/g更改为/(#)([^s]+")/g会产生正确的结果。

我建议加入捕获组。然后/(#[^s]+)"/g会返回$1=>#some-hash1, #some-hash2

由于 $1 总是只返回 #,我想你在程序的其他地方修剪它,所以也许你应该使用 /#([^s]+)"/g 它会在没有 # 的情况下返回some-hash1, some-hash2

最新更新