我有正则表达式来解析HTML内容中的所有哈希URL。
/(\#)([^\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"
我无法理解为什么它带有双引号。任何建议都会非常有用。
答案 0 :(得分:2)
我不会使用正则表达式,因为它太过分了,因为你可以简单地遍历锚点来拉动它们的hrefs的值......
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>
答案 1 :(得分:1)
使用非捕获括号
/(\#)([^\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) );
答案 2 :(得分:0)
我假设您正在查看结果的$ 2内容。
如果是这样,问题是第二个捕获组内的&#34; 。将/(\#)([^\s]+")/g
更改为/(\#)([^\s]+")/g
会产生正确的结果。
我建议加入捕获组。然后/(\#[^\s]+)"/g
将返回$1=>#some-hash1, #some-hash2
由于$ 1总是只返回#,我想你会在程序的其他地方修剪它,所以也许你应该使用/\#([^\s]+)"/g
,如果没有<{1}} EM>#
答案 3 :(得分:0)