#javascript #regex #replace
#javascript #регулярное выражение #заменить
Вопрос:
Я заменяю кучу значений в регулярном выражении на суммы в долларах. Проблема в том, что в IE, если я пытаюсь заменить на количество $0
(или, теоретически, $1
— $9
), замена никогда не происходит, поскольку она пытается заменить несуществующую группу:
'foo'.replace(/f/g, '$0');
Я хочу, чтобы результатом этой замены было «$ 0oo», как в Chrome и FF, но не в IE9 (не пробовал другие версии IE).
У Chrome и FF есть «проблема» со следующим, в том, что я не могу понять, как заменить литералом $1
:
'foo'.replace(/(f)/g, '$1')
Ответ №1:
Напишите, "$$0"
чтобы избежать $
знака.
Ответ №2:
В Chrome и Firefox вы можете обойти это ограничение, используя функцию в качестве второго аргумента функции replace:
'foo'.replace(/(f)/g, function(){return '$1';}); // => $1oo
Мое собственное тестирование показывает, что IE8 согласуется с другими браузерами в этой проблеме.
Комментарии:
1. спасибо
Я соглашусь немного позже, но предпочел бы решение, которое каким-то образом избегает
$
, в отличие от накладных расходов на вызов функции2. Как мы думаем, сколько это накладных расходов?
Ответ №3:
Проблема:
'My Bank balance is {0} '.replace(/{0}/,'$0.22')
results: "My Bank balance is {0}.22 "
This is not what we want
Решение:
'My Bank balance is {0} '.replace(/{0}/,'$$0.22')
results: "My Bank balance is $0.22 "
'My Bank balance is {0} '.replace(/{0}/,"$0.22".replace(/$/,'$$$$'))
result: "My Bank balance is $0.22 "
Объяснение: Я пытаюсь найти ‘$’ и заменить на ‘$$’. Чтобы сопоставить ‘$’, вы должны экранировать его с помощью ‘ $’, а для замены ‘$$$$’ вы должны поместить четыре ‘$’ в качестве экранирования регулярного выражения ‘$’ вместо ‘$ $’. Весело!!
Ответ №4:
@SLaks это должно быть больше похоже на: напишите «$$» вместо буквального «$».
@cwolves получение литерала вместо «специального» символа (например, «$» здесь) обычно включает либо его удвоение, либо добавление к нему префикса «».
Комментарии:
1. обычный escape-знак «» не работал, и ничто другое в JS не экранируется путем его удвоения, поэтому мне это никогда не приходило в голову
![]()