我需要从文本编辑器中提取#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
}
});
我需要捕获空格或字符串
之前的哈希标记答案 0 :(得分:0)
为了达到预期的效果,我会直接处理需要检查的元素,而不是制作一个疯狂的正则表达式,如果要替换的文本是否在标记中,则必须考虑到这一点。
这使用ES6和Array.from
。如果您需要支持非现代浏览器,则需要将ES6 function
表达式,const
和Array.from
替换为Array.prototype.slice.call(arr)
// 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;