2011-11-23 108 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)具有所有的細節,但它不可讀。 –