2014-10-07 112 views
0

在JavaScript中,我需要用下划线字符(_)替换所有出现的点字符(。)(如果有的话),除了最后一个。用javascript中的下划线字符替换所有出现的点号字符

该表达式用下划线字符(_)替换所有出现的点字符(。),包括最后一个字符(_),但我试图弄清楚如何改变它以便单独留下最后一个(。)字符。

str.replace(/\./g, '_'); 

谢谢!!

史蒂夫

回答

4

look aheads的乐趣。

"12.34.56.78".replace(/\.(?=[^.]*\.)/g,"_") 
+0

我测试你的表达完美的作品 - 我可以强加给你问它是如何工作的?我的意思是,我认为这部分(?= [^。] * \。)是创建异常的原因 - 但想理解语法,所以我知道它为什么起作用。非常感谢 !! – user815460 2014-10-07 12:33:46

+0

阅读:http://www.regular-expressions.info/lookaround.html基本想法是展望未来,并在最终结果中做出热门。 – epascarello 2014-10-07 12:35:38

+0

非常感谢 - 我测试过它,它的工作原理,如果在最后一个点字符后面有字符,Avinash的答案(下)不起作用,但您的解决方案确实如此。非常感谢,并感谢所有! – user815460 2014-10-07 12:40:59

1

使用negative lookahead

> "12.34.56.78".replace(/\.(?![^.]*$)/g,"_") 
'12_34_56.78' 
> "12.34.56.78.".replace(/\.(?![^.]*$)/g,"_") 
'12_34_56_78.' 
+1

你对“最后一个点”的定义有点奇怪。 – Bergi 2014-10-07 12:36:00

+0

就像我使用的复制和添加的文本模式。到最后。它应该匹配任何地方,而不仅仅是最后一个字符。 – epascarello 2014-10-07 12:39:12

+0

你的是“字符串的最后一个字符,如果它是一个点”,但它应该是“最后一个*点字符*即使不在字符串末尾” – Bergi 2014-10-07 12:39:23

相关问题