2013-06-12 35 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