2011-11-23 114 views
1

实际上我想替换一个字符串,除非它出现在圆括号中。基于正则表达式替换js

例如:

然后期望的输出是:

C is a nice language. (JAVA) has lots of features. C is portable. (JAVA) even comes in 64 bit. 

甚至Java可以来作为像

子串

JAVA is a nice language. (JAVA) has lots of features. JAVA is portable. (JAVA) even comes in 64 bit. 
现在

如果我替换为C JAVA

XJAVAX is a nice language. (XJAVAX) has lots of features. JAVA is portable. (JAVA) even comes in 64 bit. 

now i网络连接用C代替JAVA:

然后预期输出:

XCX is a nice language. (XJAVAX) has lots of features. C is portable. (JAVA) even comes in 64 bit. 
+7

请不要用C代替Java,请... – Mudassir

+1

这只是一个例子..我并不真正的意思它..我希望你的困惑..我会建议你2离开s/w行业,并加入一些..... – Neel

+0

我认为那些upvoted评论@Mudassir的人了解这些东西。 –

回答

3

由于JavaScript没有向后看,最简单的方法可能是一个交替:

str = str.replace(/\(JAVA\)|JAVA/g, function(m) { 
    return m === "(JAVA)" ? m : "C"; 
    // Or 
    // return m.length === 6 ? m : "C"; 
}); 

除此之外,你进入尝试simulate look-behind,这可能在某些方面,但混乱。

+0

@Neel:这可能很容易通过在交替的两侧放置一个单词边界标记来解决:'\ b \(JAVA \)| JAVA \ b'。跑出门去,所以我无法测试。 [RegExp上的MDC页面](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp)可以是一个有用的指南。 [spec](http://es5.github.com/#x15.10)具有所有的细节,但它不可读。 –