用于提取主题标签的正则表达式,不包括锚标签中的主题标签

时间:2016-10-04 23:35:53

标签: javascript

我需要从文本编辑器中提取#tags,除了锚标签内的#tags。我目前使用的表达方式是: (^ | \ s)(#[a-z \ d -_] +)

此工作正常,并在测试网站中正确显示所有匹配项 https://regex101.com/r/pJ4wC5/57。但是,当我插入相同的表达式时,它不会识别出字符串开头的表达式。

编辑: 这是代码

text=newText.replace(/(?!<a[^>]*?>)(^|\s)(#[a-z\d-_]+)(?![^<]*?<\/a>)/img,function (match,index) {
if(newText[index-1]!=='&'){ 
return '<a  href="" data-hashfilter>' + match + '</a>'
}else{
return match
  }
});

我需要捕获空格或字符串

之前的哈希标记

1 个答案:

答案 0 :(得分:0)

为了达到预期的效果,我会直接处理需要检查的元素,而不是制作一个疯狂的正则表达式,如果要替换的文本是否在标记中,则必须考虑到这一点。

这使用ES6和Array.from。如果您需要支持非现代浏览器,则需要将ES6 function表达式,constArray.from替换为Array.prototype.slice.call(arr)

&#13;
&#13;
// get all the elements that need to be searched
const els = Array.from(document.querySelectorAll('.stuff *'))
// check each elements textContent to see if there is a #hashtag and reduce to an array
const hashTags = els.reduce((hashTags, el) => {
  return hashTags.concat(el.textContent.match(/\#[^\s]+/) || [])
}, [])
console.log(hashTags)
&#13;
<section class="stuff">
  <h3>stuff #heading</h3>
  <p>this is a #paragraph with a <a href="#dontcapture">link with a #hashtag</a></p>
  <p data-hashtag="#hashtag">this has a #datahashtag</p>
</section>
&#13;
&#13;
&#13;