Замените двойные кавычки на могилы в строке, не создавая новую строку - PullRequest
0 голосов
/ 15 октября 2019

У меня есть json, в котором я храню свойство со ссылкой. Я хочу записать это в файл .txt, чтобы я мог скопировать содержимое и использовать его в объекте ресурса, в котором есть переменная serverUrl, которую я хочу вставить, используя литералы шаблона . Прежде чем я смогу это сделать, мне нужно немного изменить строковое значение JSON, чтобы я мог использовать литералы шаблона.

Объект json имеет следующий формат:

{
  "products": [
    {
      "image": "http://test.test.com/images/imageName.jpg"
    },
    {
      "image": "http://test.test.com/images/imageName2.jpg"
    }
  ]
}

Что яя пытаюсь добиться, чтобы изменить каждое значение изображения в следующем формате для каждого объекта продукта:

`http://${serverUrl}/images/imagename`

Мне удалось заменить URL-адрес с помощью простой string.replace () во время создания json, но я борюсь со следующими шагами:

  1. Измените двойные кавычки на могилы ("" => ``) и сохраните URL.
  2. Делайте это глобально, я надеваюНе нужно извлекать значения, объект должен быть перезаписан.

Я пытался написать несколько регулярных выражений, но я не могу понять, как я могу заменить обе двойные кавычки и сохранитьURL в одном регулярном выражении. Это правильный путь? Или я должен попробовать что-то совершенно другое

Редактировать

Мой код пока

let dataImport = [];

// Code to convert excel to JSON
// Contains the following line for the image property
case "image": 
  value = value.replace("https://test.test.com", "${serverUrl}");
  rowData["image"] = value;
break;

// Convert object
let json = JSON.stringify(dataImport, null, 2);
fs.writeFileSync("data.txt", json);

1 Ответ

1 голос
/ 15 октября 2019

var json = JSON.stringify({
  "products": [
    {
      "image": "http://test.test.com/images/imageName.jpg"
    },
    {
      "image": "http://test.test.com/images/imageName2.jpg"
    }
  ]
}, null, '  ');

var domain = "test.test.com";
console.log(convertJsonUrls(json, domain));

/**
 * Converts any strings containing urls for the specified domain into template-strings,
 * and replaces the domain with '${serverUrl}'
 */
function convertJsonUrls(json, domain) {
    var stringRE = /"((?:\\.|[^\\"])*)"/g;
    var urlRE = new RegExp("^(https?://)" + escapeRegExp(domain) + "(/.*)$");

    var template = json.replace(stringRE, function (raw, content) {
        var urlMatch = urlRE.exec(content);
        if (!urlMatch) return raw; // no change, keep double-quotes
        return "`" + urlMatch[1] + "${serverUrl}" + urlMatch[2] + "`";
    });

    return template;
}

/**
 * Escapes any RegExp special characters.
 * Copied from https://stackoverflow.com/a/6969486/22364
 */
function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...