首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >js regex:替换不跟在后面或不跟在某个单词后面的单词

js regex:替换不跟在后面或不跟在某个单词后面的单词
EN

Stack Overflow用户
提问于 2015-10-12 17:01:38
回答 2查看 79关注 0票数 0

我想替换"span“外的"word”,而保留"span“内的另一个”word“。到目前为止,当两者都在"mark>“后面和"span”后面时,下面的代码可以正常工作。但我想更进一步,在"mark>“之后或在"span”之后,这两个条件中的任何一个都应该导致替换操作。

代码语言:javascript
复制
var replaceString = "newWord";
var htmlString = "This <span style='color:red' title='mark'>normal word</span> need no change. This word is to be replaced. <span>Another word</span> need no change.";

var reg=new RegExp("(?!mark>)"+replaceString+"(?!<\/span>)","gi");
var bb=htmlString.replace(reg,replaceString);    
alert(bb) 

// Final result should be "This <span style='color:red' title='mark'>normal word</span> need no change. This newWord is to be replaced. <span>Another word</span> need no change.";

更新:使用标题作为标记。添加起始标签跨度

更新:遵循下面的建议,我正在尝试用另一种方式解决这个问题,请看这里:js regex: replace words not in a span tag

EN

回答 2

Stack Overflow用户

发布于 2015-10-12 17:26:50

使用另一个span标记会不会很舒服?通过将类名放入其中,您应该能够通过更改包含该类的每个span的内容来更改需要更改的单词。

类似于:

This <span style='color:red' mark>word</span> need no change. This <span class='changeMe'>word</span> is to be replaced. Another word</span> need no change.

和一个jQuery脚本

$('.changeMe').text("newWord")

如果您仍然想使用Regexp,对于OR条件,您可能只需执行两次:

代码语言:javascript
复制
var reg=new RegExp("(?!mark>)"+replaceString,"gi");
var bb=htmlString.replace(reg,replaceString);
reg=new RegExp(replaceString+"(?!<\/span>)","gi");
bb=htmlString.replace(reg,replaceString);
票数 0
EN

Stack Overflow用户

发布于 2015-10-12 17:33:34

您正在寻找JS不支持的负面look-ahead(或Lookbehinds)。检查http://www.regular-expressions.info/javascript.html

您可以尝试执行以下Regex:

代码语言:javascript
复制
var reg = new RegExp('[^(mark>)]word[^(</span>)]', "gi")
htmlString.replace(reg, " newWord "); //Check the spaces

我更倾向于使用JS来获取DOM元素并迭代替换文本(不确定它是一个单词,甚至是一个行话)。

HTH

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33077113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档