【问题标题】:js regex: replace a word not follows or not followed by a certain wordjs 正则表达式:替换一个单词不跟随或不跟随某个单词
【发布时间】:2015-10-12 09:01:37
【问题描述】:

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

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.";

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

更新:按照以下建议,我正在尝试以其他方式解决问题,请参见此处:js regex: replace words not in a span tag

【问题讨论】:

  • 您的 HTML 无效。第二个&lt;/span&gt; 没有起始标签。另外,mark 应该做什么?
  • 我加了“mark”表示这个词已经加了“span”,不用再改了。我删除起始标签只是为了描述我想要的。它在实际代码上运行时存在。谢谢。
  • 我不明白要替换单词"word" 的信息应该来自哪里。您的第一个跨度包含“普通单词”,但您想替换单词"word"
  • @torazaburo,我的意思是span中的“单词”无需更改,“单词”可能在句子中。

标签: javascript regex replace


【解决方案1】:

您是否愿意使用另一个span 标签? 通过将类名放入其中,您应该能够通过更改包含该类的每个 span 的内容来更改需要更改的单词。

类似:

This &lt;span style='color:red' mark&gt;word&lt;/span&gt; need no change. This &lt;span class='changeMe'&gt;word&lt;/span&gt; is to be replaced. Another word&lt;/span&gt; need no change.

还有一个 jQuery 脚本正在运行

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

如果您仍想使用正则表达式,对于 OR 条件,您可能只需执行两次:

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

【讨论】:

  • 看起来很简单。用js能做到吗?
  • 好久没用普通的js了 var elts = Document.getElementByClass('changeMe') for(elt in elts){ //做点什么 }
  • 是的,getElementByClass 有助于简单地了解类。但如果是大文本,我需要先找出单词,然后获取它的类,最后替换单词。 ;-( .
  • 嗯,我不知道,但它需要它需要什么。不幸的是,大文件中的模式匹配必然很慢。也许双正则表达式执行更适合您的特定情况。
  • 我正在尝试另一种方法来解决我的问题,请查看更新链接。
【解决方案2】:

不幸的是,您正在寻找 JS 不支持的负前瞻(或 Lookbehinds)。检查http://www.regular-expressions.info/javascript.html

你可以试试下面的正则表达式:

var reg = new RegExp('[^(mark>)]word[^(</span>)]', "gi")
htmlString.replace(reg, " newWord "); //Check the spaces

我宁愿建议使用 JS 获取 DOM 元素并替换文本 iterative-lly(不确定是不是一个词,甚至是行话)。

HTH

【讨论】:

  • 很抱歉听到这个消息。我在span 中添加了一个标题,可以检测该单词是否在标题='mark' 的span 中吗?怎么做?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
相关资源
最近更新 更多