Javascript,替换为regex,在这种情况下可能吗?

Javascript,替换为regex,在这种情况下可能吗?,javascript,regex,replace,Javascript,Regex,Replace,可以用正则表达式解决吗 我有一个值数组: var arr = ['eiusmod', 'sort', 'incididunt', 'dolor']; 我有一个名为my_html的字符串,它提供了.html() Lorem ipsum dolor sit amet 在此处搜索:Concertetur Adipising Elite, 这是临时性的劳动和就业机会。但是,在最低限度上,我们需要一个实验室来进行日常工作。 两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致

可以用正则表达式解决吗

我有一个值数组:

var arr = ['eiusmod', 'sort', 'incididunt', 'dolor'];
我有一个名为
my_html
的字符串,它提供了
.html()


Lorem ipsum dolor sit amet
在此处搜索:Concertetur Adipising Elite,
这是临时性的劳动和就业机会。但是,在最低限度上,我们需要一个实验室来进行日常工作。
两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡。
目标:

在变量my_html中为找到的每个单词(在my arr中)添加一个html标记,如下所示

<div data-sort="1">
<h1 data-position="1">Lorem ipsum <mark>dolor</mark> sit amet</h1>
<strong>search here : consectetur adipiscing elit, </strong>
<div>
sed do <u><mark>eiusmod</mark></u> tempor <mark>incididunt</mark> ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</div>
Duis aute irure <i><mark>dolor</mark></i> in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>

Lorem ipsum dolor sit amet
在此处搜索:Concertetur Adipising Elite,
这是临时性的劳动和就业机会。但是,在最低限度上,我们需要一个实验室来进行日常工作。
两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡。
规则:

  • 不要在标记的属性中添加标记
  • 如果单词已有标记,则不要添加标记
谢谢你们的帮助,伙计们, 问候

规则:不要在标记的属性中添加标记

仅仅用一个简单的正则表达式是无法做到这一点的;您需要一个HTML解析器。如果您是在浏览器环境中执行此操作,则有一个内置的。但是,几乎无论您在什么环境中执行此操作,都有一个HTML解析器可供使用(Node.js、Java、PHP等)

演示如何在浏览器中执行此操作。为了完整起见,下面是适合您的示例的代码(请参见注释):

//数组
var arr=['eiusmod','sort','incidount','dolor'];
//创建一个替换单词的正则表达式。
//这假定单词中没有在正则表达式中特殊的字符
//表达方式;如果该假设无效,请运行数组
//首先是regex转义函数。
var rex=new RegExp(“\\b(?“+arr.join”(“|”)和“+”\\b”,“g”);
//弦
var-str=
"" +
“Lorem ipsum dolor sit amet”+
“在此处搜索:Concertetur Adipising Elite,”+
"" +
“临时性劳动合同包括劳动合同和劳动合同。在最低限度的工作中,劳动合同和劳动合同的执行是不可更改的。”+
"" +
“两人或两人都有权在婚姻无效的情况下受到惩罚。除了偶尔因不谨慎而死亡外,不得因工作过失而受到惩罚。”+
"";
//将其解析为临时div
var div=document.createElement(“div”);
div.innerHTML=str;
//更新吗
多雷普莱斯(分区);
控制台日志(“完成”);
//获取并显示结果
str=div.innerHTML;
console.log(str);
功能数据替换(元素){
//循环遍历此元素的子元素
var child=element.firstChild
while(儿童){
开关(子节点类型){
案例3://文本节点
//更新其文本
child=handleText(child);
打破
案例1://要素
//递归以处理此元素的子元素
多尔置换术(儿童);
child=child.nextSibling;
打破
违约:
child=child.nextSibling;
打破
}
}
}
函数handleText(节点){
变量匹配,targetNode,followNode,包装器;
//在此节点文本中查找第一个目标词
rex.lastIndex=0;
match=rex.exec(node.nodeValue);
如果(匹配){
//在比赛开始时分开
targetNode=node.splitText(match.index);
//比赛结束时分开
FollowNode=targetNode.splitText(匹配[0]。长度);
//将目标包裹在“标记”元素中
包装器=document.createElement('mark');
targetNode.parentNode.insertBefore(包装器,targetNode);
//现在我们将目标文本移动到其中
appendChild(targetNode);
//清除所有空节点(如果目标文本
//位于文本节点的开头或结尾)
if(node.nodeValue.length==0){
node.parentNode.removeChild(节点);
}
if(followNode.nodeValue.length==0){
followNode.parentNode.removeChild(followNode);
}
}
//返回要处理的下一个节点,即
//如果我们添加了包装器,或者如果没有添加,则在'node'之后添加包装器
返回(包装器| |节点);
}
规则:不要在标记的属性中添加标记

仅仅用一个简单的正则表达式是无法做到这一点的;您需要一个HTML解析器。如果您是在浏览器环境中执行此操作,则有一个内置的。但是,几乎无论您在什么环境中执行此操作,都有一个HTML解析器可供使用(Node.js、Java、PHP等)

演示如何在浏览器中执行此操作。为了完整起见,下面是适合您的示例的代码(请参见注释):

//数组
var arr=['eiusmod','sort','incidount','dolor'];
//创建一个替换单词的正则表达式。
//这假定单词中没有在正则表达式中特殊的字符
//表达方式;如果该假设无效,请运行数组
//首先是regex转义函数。
var rex=new RegExp(“\\b(?“+arr.join”(“|”)和“+”\\b”,“g”);
//弦
var-str=
"" +
“Lorem ipsum dolor sit amet”+
“在此处搜索:Concertetur Adipising Elite,”+
"" +
“这是一个临时性的工作,是一个巨大的工作机会,是一个非常小的机会,
<div data-sort="1">
<h1 data-position="1">Lorem ipsum <mark>dolor</mark> sit amet</h1>
<strong>search here : consectetur adipiscing elit, </strong>
<div>
sed do <u><mark>eiusmod</mark></u> tempor <mark>incididunt</mark> ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</div>
Duis aute irure <i><mark>dolor</mark></i> in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
/<mark>[^<>]+<\/mark>|<[^>]*(?=>)|(^|[^a-zA-Z\u00C0-\u017F])(eiusmod|sort|incididunt|dolor|única)(?=[^a-zA-Z\u00C0-\u017F]|$)|[\s\S]/yi