繁体   English   中英

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

[英]Regex to parse hash url from HTML content

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

我不明白为什么要加上双引号。 任何有帮助的建议。

我不会为此使用正则表达式,因为它过于矫正并且因为您可以简单地循环浏览锚点以获取其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> 

使用非捕获括号,

/(\#)([^\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的内容。

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

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

由于$ 1始终只会返回 ,我想您会在程序中的其他地方将其修剪掉,所以也许您应该使用/\\#([^\\s]+)"/g来返回some-hash1, some-hash2而不包含

只需将双引号移出括号即可:

(\#)([^\s]+)"

查看其运作方式: https//regex101.com/r/fmrDyu/1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM