Использование $ 0 для ссылки на все совпадение в String.replace Javascript - PullRequest
16 голосов
/ 23 октября 2010

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

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>'; });

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

Ответы [ 2 ]

28 голосов
/ 23 октября 2010

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

2 голосов
/ 16 ноября 2012

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

str.replace(/\$/,'$$')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...