Использование $0 для ссылки на весь матч в Javascript String.replace

Я выделяю экземпляры строки поиска в наборе текста. Я хочу сохранить случай исходного текста при замене нечувствительного к регистру совпадения запроса. Вот что я начал с:

text.replace(new RegExp('(' + query + ')', 'ig'), '<em>$1</em>');

В этом случае мне нужно было бы избежать query, чтобы предотвратить скобки в скобках, поэтому я подумал, что попробую:

text.replace(new RegExp(query, 'ig'), '<em>$0</em>');

Но $0, похоже, не используется - все согласованные строки заменяются на $0. Однако я нашел альтернативу:

text.replace(new RegExp(query, 'ig'), function(match) { return '<em>' + match + '</em>'; });

Я не большой поклонник того, как это выглядит. Как вы порекомендовали бы выполнять эту замену строк?

Ответы

Ответ 1

Используйте $&, а не $0 для обозначения всего совпадения. Я обвиняю Perl.

Ответ 2

используйте $$ 0 вместо $0

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