У меня есть строка вроде:
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, поэтому я, вероятно, что-то делаю неправильно :(
Вы можете использовать /"[^"]+"/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)
заменяет каждый одиночный символ пробела внутри значения матча с "разделитель".