Заменить несколько одинаковых символов строкой

Используя Javascript, я хочу заменить:

This is a test, please complete ____.

с участием:

This is a test, please complete %word%.

Количество подчеркиваний непостоянно, поэтому я не могу просто использовать что-то вроде str.replace('_____', '%word%').

Я пробовал str.replace(/(_)*/g, '%word%'), но ничего не вышло. Какие-либо предложения?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
46
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Удалите группу захвата и убедитесь, что _ повторяется с + (хотя бы одно вхождение соответствует как можно большему количеству _):

const str = 'This is a test, please complete ____.';
console.info(
  str.replace(/_+/g, '%word%')
);

Регулярное выражение

/(_)*/

означает, на простом языке: сопоставить ноль или более знаков подчеркивания, что, конечно, не то, что вы ищете. Это будет соответствовать позиции каждый в строке (кроме позиций в строке между символами подчеркивания).

Спасибо, проще, чем я думал! Я боялся, что мне придется использовать одно из тех сложных выражений опережения.

Raisen 04.10.2018 04:44

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

This is the {$1} test, please complete {$2}.

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

var sentence = "This is the {$1} test, please complete {$2}.";
var show = sentence.replace(/\{\$\d+\}/g, "____");
console.info(show);

Если вы хотите заменить данный заполнитель, вы также можете использовать целевую замену регулярного выражения. Например, чтобы настроить таргетинг на первый заполнитель, вы можете использовать:

var sentence = "This is the {$1} test, please complete {$2}.";
var show = sentence.replace(/\{\$1\}/g, "first");
console.info(show);

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

Другие вопросы по теме