Как заменить «специальные» символы в строке кода на расширенный фрагмент того же кода? - PullRequest
0 голосов
/ 14 сентября 2018

Я создаю расширение Chrome, которое в основном находит строку текста, такую ​​как эта (обратите внимание на различные цифры):

id%22%3A99986%2C%22name%22%3A%22null%22%7D%2C%7B%22id%22%3A1002938%2C%22name%22%3A%22null%22%7D%2C%7B%22

, а затем использую javascript, чтобы поменять этот текст выше с этим:

id%22%3A77764%2C%22name%22%3A%22null%22%7D%2C%7B%22id%22%3A77984%2C%22name%22%3A%22null%22%7D%2C%7B%22id%22%3A87746%2C%22name%22%3A%22null%22%7D%2C%7B%22

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

Вот код, который работает для меня:

document.body.innerHTML = document.body.innerHTML.replace(/99986/g, '77764');

Я пытаюсь заменить один фрагмент кода на два фрагмента кода (очевидно, это неправильно, но понятно, чтоЯ пытаюсь сделать):

document.body.innerHTML = document.body.innerHTML.replace(/id%22%3A99986%2C%22name%22%3A%22null%22%7D%2C%7B%22/g, 'id%22%3A77764%2C%22name%22%3A%22null%22%7D%2C%7B%22id%22%3A77984%2C%22name%22%3A%22null%22%7D%2C%7B%22');

Обновление 1:

Спасибо Emeeus, ваш код работал отлично!К сожалению, я допустил ошибку в своем примере, поэтому мне пришлось исправить это с самого конца.Это новый код, использующий ваш макет:

 var strA = 
"%7Bid%22%3A1001%2C%22name%22%3A%22The+Antique+Store%22%7D%2C%7B%22id%22%3A1010%2C%22name%22%3A%22Clothes%22%7D%2C%7B%22id%22%3A1349%2C%22name%22%3A%22Old+Store%22%7D";

    var strB = "%7Bid%22%3A1001%2C%22name%22%3A%22The+Modern+Store%22%7D%2C%7B%22id%22%3A1010%2C%22name%22%3A%22Clothes%22%7D%2C%7B%22id%22%3A1349%2C%22name%22%3A%22New+Store%22%7D";

    var arrA = JSON.parse(decodeURIComponent(',{""' + strA + '",:""}'));

    var arrB = JSON.parse(decodeURIComponent(',{""' + strB + '",:""}'));

console.log(arrA)
console.log(arrB)

var res = Object.assign(arrA, arrB);

console.log(encodeURIComponent(JSON.stringify(res)))

Но я столкнулся с этой ошибкой «Ошибка: неожиданный токен в JSON в позиции 0».Есть идеи?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Ваши строки являются частями JSON URI-кодированного , поэтому я предлагаю сначала декодировать строки, а затем проанализировать их, используя JSON.parse, затем вы можете работать с литералами объектов, что проще в большинстве случаев.раз, вот пример:

var strA = "id%22%3A99986%2C%22name%22%3A%22null%22%7D%2C%7B%22id%22%3A1002938%2C%22name%22%3A%22null%22%7D%2C%7B%22";

var strB = "id%22%3A77764%2C%22name%22%3A%22null%22%7D%2C%7B%22id%22%3A77984%2C%22name%22%3A%22null%22%7D%2C%7B%22id%22%3A87746%2C%22name%22%3A%22null%22%7D%2C%7B%22";

var arrA = JSON.parse(decodeURIComponent('[{"' + strA + '":""}]'));

var arrB = JSON.parse(decodeURIComponent('[{"' + strB + '":""}]'));


console.log(arrA)
console.log(arrB)

var res = Object.assign(arrA, arrB);//<-- example

console.log(encodeURIComponent(JSON.stringify(res)))//<-- you could encode the result again
0 голосов
/ 14 сентября 2018

Я думаю, вам следует проверить, является ли строка typeof, которую вы пытаетесь заменить, строкой. Я проверил, проверьте, решает ли это вашу проблему.

Смотрите скриншот: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...