我有正则表达式来解析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