2014-10-07 4 views
0

В JavaScript мне нужно заменить все вхождения символа точки (.) Символом подчеркивания (_), если какой-либо EXCEPT последний.Заменить все вхождения символа точки символом подчеркивания в javascript

Это выражение заменяет все вхождения символа точки (.), Включая последний символ подчеркивания (_), но я пытаюсь выяснить, как это изменить, чтобы он оставил последний (.) Символ в одиночку.

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

Спасибо!

Стив

ответ

4

Весело с look aheads.

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

Я проверил и ваше выражение работает отлично - я могу наложить на вас, чтобы спросить, как это работает? Я хочу сказать, что эта часть (? = [^.] * \.) Является тем, что создает исключение, но хотелось бы понять синтаксис, чтобы я знал, почему он работает. Огромное спасибо !! – user815460

+0

Прочтите следующее: http://www.regular-expressions.info/lookaround.html Основная идея заключается в том, чтобы смотреть вперед, чтобы соответствовать, и горячий включил его в конечный результат. – epascarello

+0

Большое спасибо - я тестировал и это работает, ответ Авинаша (ниже) не работает, если есть символы, следующие за символом последней точки, но ваше решение. Большое спасибо и спасибо всем! – user815460

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

+0

Как и в текстовом шаблоне, я использовал то, что вы скопировали и добавили. к концу. Он должен соответствовать где угодно, а не только последнему персонажу. – epascarello

+0

Ваш «последний символ строки, если это точка», но это должен быть «последний символ * точки», даже если не в конце строки « – Bergi

Смежные вопросы