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

时间:2017-04-11 14:37:52

标签: javascript regex hash

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

我无法理解为什么它带有双引号。任何建议都会非常有用。

4 个答案:

答案 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)

只需在括号中移出双引号:

some-hash1, some-hash2

了解它的工作原理:https://regex101.com/r/fmrDyu/1