2010-03-12 3 views
19

Как указано в заголовке, мне нужно связать все вхождения знака $ в строковой переменной с символом подчеркивания.

Я попытался:

str.replace(new RegExp('$', 'g'), '_'); 

Но это не работает для меня, и ничего не заменяется.

ответ

39

$ в RegExp - специальный символ, поэтому вам нужно избежать его с обратной косой чертой.

new_str = str.replace(new RegExp('\\$', 'g'), '_'); 

однако, в JS вы можете использовать более простой синтаксис

new_str = str.replace(/\$/g, '_'); 
+2

+1, идите на литерал, не беспокойтесь о конструкторе, если вам не нужно использовать переменные в регулярных выражениях. –

1

........

str.replace(new RegExp('\\$', 'g'), '_'); 

Becaue $ специальный символ в JS, что вам нужно, чтобы избежать его.

+1

В вторая неверна в двух подсчетах, она заменит '\ $', а не '$', и она заменит только 1 вхождение, а не несколько. –

+0

@ Andy: Да, осознал это и вскоре удалил :) Спасибо – Sarfraz

8

Вам не нужно использовать RegExp. Вы можете использовать синтаксис литерала:

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

Вам просто нужно, чтобы избежать $ характера, как это специальный символ в регулярных выражениях, отмечающий конец строки.


Редактировать О, вы также можете использовать split и join, чтобы решить эту проблему:

str.split("$").join("_") 
+0

Как идея разделения и объединения - как быстро это происходит по сравнению с регулярным выражением? –

-3

Вам не нужны регулярные выражения просто заменить один символ:

newStr = oldStr.replace('$', '_') 
+4

Название указано «все». – kennytm

+0

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace – user187291

+0

Это заменит только первое вхождение символа, а не «все» вхождения. Пожалуйста, удалите этот ответ, поскольку это явно неправильно – edc65

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