与regexjavascript匹配

与regexjavascript匹配,javascript,node.js,regex,Javascript,Node.js,Regex,我试图构建一个符合特定模式的正则表达式,下面是一个示例: 检验 fiction <a href="/wiki/Canon_(fiction)">Canon</a> some more fiction text 小说更多的小说文本 所需的是匹配所有“虚构”单词,而不匹配标记中的单词 我已经试着用它来做了 /((fiction)(?!<a href=.*fiction.*">))/g /((虚构)(?!您可以创建隐藏的HTML节点并保留所有文本节点。使用正则

我试图构建一个符合特定模式的正则表达式,下面是一个示例: 检验

fiction <a href="/wiki/Canon_(fiction)">Canon</a> some more fiction text
小说更多的小说文本
所需的是匹配所有“虚构”单词,而不匹配
标记中的单词

我已经试着用它来做了

/((fiction)(?!<a href=.*fiction.*">))/g

/((虚构)(?!您可以创建隐藏的HTML节点并保留所有文本节点。使用正则表达式不是一个好主意。在DOM中导航是最安全的方法

var-htmlText='虚构更多虚构文本';
var HIDDEN_CLASS_NAME='隐藏单词列表';
log(extractWords(htmlText).join(',');
函数提取字(htmlText){
createHiddenNode(隐藏的类名称,htmlText,document.body);
var tmpNode=document.getElementsByClassName(隐藏的类名称)[0];
var words=grabTextFromNode(tmpNode);
tmpNode.remove();
返回单词;
}
函数createHiddenNode(类名、htmlText、targetEl){
var tempEl=document.createElement('div');
tempEl.className=className;
tempEl.innerHTML=htmlText;
tempEl.style.display='none';
if(targetEl!=null){
appendChild(createHiddenNode(隐藏的类名称,htmlText));
}
回程tempEl
}
函数grabTextFromNode(节点){
var-words=[];
如果(节点!=null){
node=node.firstChild;
while(节点!=null){
if(node.nodeType===node.TEXT\u节点){
words.push(node.textContent);
}
node=node.nextSibling;
}
}
words=words.join(“”).split(/\s+/);
返回单词;
}
。作为控制台包装器{
排名:0;
最大高度:100%!重要;
}