如果之前的文本等于,则不替换

时间:2017-03-09 11:22:53

标签: javascript regex

以下是我的替换代码:

.replace(/java(script)/g,'$1')

因此"some javascript to replace"替换后将成为"some script to replace"。我想要的是,如果javascript#开头,我不想将#javascript替换为#script。所以

的结果

"some #javascript to replace"应为"some #javascript to replace"

我应该使用什么正则表达式?

2 个答案:

答案 0 :(得分:4)

使用以下正则表达式替换:



var s = "some javascript #javascript to replace";
s = s.replace(/(^|[^#])java(script)/g,'$1$2');
console.log(s);




<强>详情:

  • (^|[^#]) - 捕获第1组匹配字符串的开头或除#以外的任何字符
  • java - 文字字符序列java
  • (script) - 捕获与文字字符序列script匹配的第2组。

在替换模式中,捕获的部分会重新插入到生成的字符串中,只有在java之前没有#后才能有效删除script

答案 1 :(得分:2)

使用capturing group检查前面的字符,但您可以使用lookahead assertion而不是捕获script部分。如有必要,请使用word boundary(\b)以避免匹配单词中的任何内容。

.replace(/([^#]|^)\bjava(?=script\b)/g,'$1')

&#13;
&#13;
console.log(
  "some #javascript to replace ajavascript javascript".replace(/([^#]|^)\bjava(?=script\b)/g, '$1')
)
&#13;
&#13;
&#13;