以下是我的替换代码:
.replace(/java(script)/g,'$1')
因此"some javascript to replace"
替换后将成为"some script to replace"
。我想要的是,如果javascript
以#
开头,我不想将#javascript
替换为#script
。所以
"some #javascript to replace"
应为"some #javascript to replace"
我应该使用什么正则表达式?
答案 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')
console.log(
"some #javascript to replace ajavascript javascript".replace(/([^#]|^)\bjava(?=script\b)/g, '$1')
)
&#13;