2013-06-12 34 views
3

我想替換所有僅有的單個等號。Javascript正則表達式 - 替換單個字符

var mystr = 'ONE == TWO ... THREE==FOUR ... FIVE = SIX ... SEVEN=EIGHT' ... NINE := TEN; 
return mystr.replace(/(?=\=)([=]{1})(?!\=)/gm, '=='); 

我得到如下:

ONE === TWO ... THREE===FOUR ... FIVE == SIX ... SEVEN==EIGHT ... NINE :== TEN 

號5-6,7-8,都OK。但是,我想這樣:

ONE == TWO ... THREE==FOUR ... FIVE == SIX ... SEVEN==EIGHT ... NINE := TEN 

我的正則表達式有什麼問題?

+1

你的正則表達式不執行任何操作,試圖識別':'。那麼,怎麼可能知道不要複製最後一個'='字符呢? (提示:由於JavaScript沒有向後斷言這是相當棘手...最簡單的方法將是一個第二通路,以取代':==''與:='。) –

+0

FYI,'([= {1 })和'([=])是一樣的''和'(=)'是一樣的(這裏甚至不需要括號)。不要讓它過於複雜。 –

回答

3

由於JavaScript不支持你不能檢查字符之前是等於char或不後向斷言。但是你可以匹配它再次插入。

return mystr.replace(/([^=:])=(?!=)/g, '$1=='); 

請參閱here on Regexr

([^=:])是否定字符類,匹配任何字符,但=和: 。該字符被$1重新插入替換字符串中。

這是行不通的,當在字符串中的第一個字符是一個單一的「=」,由於字符串的開始將不被[^=:]匹配。

2

也許你可以使用這個表達式:

([^=:])=(?!=) 

因此,這將匹配的東西,任何事情不是=:然後一個=標誌,沒有=後開始。

然後用替代的$1==

測試here

如果你想要的圖片太...

Regular expression image