заменить все пробелы в определенных местах, используя JavaScript

1

У меня есть строка вроде:

image.id."HashiCorp Terraform Team <[email protected]>" 
AND  image.label."some string"."some other string"

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

  image.id."HashiCorp___Terraform___Team___<[email protected]>" 
    AND  image.label."some___string"."some___other___string"

Я пробовал это:

text = text.replace(/"(\w+\s+)+/gi, function (a) {
                return a.replace(' ', _delimiter);
            });

Но он заменяет только первое пространство, поэтому я получаю: HashiCorp___Terraform Team <[email protected]>. и some___other string

Мне очень плохо с regexp, поэтому я, вероятно, что-то делаю неправильно :(

  • 0
    Поскольку ваш ввод выглядит как язык программирования, вот обязательное напоминание о том, что вы не можете обрабатывать такие языки только с помощью регулярных выражений, и может быть лучше использовать реальный токенизатор / парсер.
  • 0
    @georg Это не язык программирования, это произвольная текстовая строка, введенная пользователем, которая должна следовать некоторым правилам, но внутри кавычек пользователь может поместить любое значение, которое он хочет. Если вы беспокоитесь о безопасности, строка очищается в сервер.
Теги:

1 ответ

3
Лучший ответ

Вы можете использовать /"[^"]+"/g регулярное выражение для поиска подстроки между двумя " символами, а затем заменить пробельные символы внутри метода обратного вызова:

var text = 'image.id."HashiCorp Terraform Team <[email protected]>" \nAND  image.label."some string"."some other string"';
var _delimiter = "___";
text = text.replace(/"[^"]+"/g, function (a) {
          return a.replace(/\s/g, _delimiter);
});
console.log(text);

"[^"]+" Шаблон соответствует а ", затем 1 или более символов, кроме " а затем закрытие ". Переменная содержит значение соответствия и a a.replace(/\s/g, _delimiter) заменяет каждый одиночный символ пробела внутри значения матча с "разделитель".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню