Задать вопрос
@LebedevStr

Как заменить текст с помощью регулярных выражений в jQuery?

Есть такая строка
<b id="finish_kar_cri">0x61496a395F549XzxzxZ</b>

Как ее превратить в

<b id="finish_kar_cri">8472875</b>

?
  • Вопрос задан
  • 718 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@daniil14056
Регулярные выражения нужны при парсинге страницы, и извлечении информации, а jQuery это уже работа с dom этой страницы
Вот ууделил времени, без JQuery изменяем текст, к примеру шаблон какой-то, пришедший с сервера и добавляем в документ.
/**
 * Изменяет по шаблону все найденные совпадения
 * @param htmlcode    страница которую нужно изменить
 * @param listReplace  список значений для изменения найденных
 * @param pattern      паттерн регулярное выражения поиска
 * @param globalFind   нужно ли изменять все значения или только одно
 * @returns {*|string|void}  возращаяет изменненный текст html документа
 */
function  replaceToken(htmlcode, listReplace,pattern, globalFind = true) {
    /**
     * Получает список токенов, которыми нужно заменить
     * Возращает заряженный генератор с списком по порядку выражений замены,
     * каждый раз будет возращать новое значение замены, список может быть прислан с сервера,
     * в случаее если найденных значений будет больше, то он не чего не измениn. Выражение "$&"
     * не изменяет найденое вхождение
     * @param list_tokens - массив- список значений которыми нужно заменить всякие 0x23423j343/
     * @returns {{generator: generaterSReplace}} возвращает генератор, который каждый раз будет возвращать следующие значения для замены 
     */
    function  loadGenerator(list_tokens) {
        return {
            generator: function* generaterSReplace() {
                for(let i=0; i<list_tokens.length;i++)
                    yield list_tokens[i];
                return "$&";
            }
        }
    }

    let generator=loadGenerator(list_tokens).generator();
    let reg;
    if(globalFind || listReplace instanceof Array)
        reg =new RegExp(pattern,["mg"]);
    else
         reg=new RegExp(pattern,["m"]);

    return res =htmlcode.replace(reg,function(str1,str2){
        return str1.replace(str2,generator.next().value);
    });

}/****************TEST-------------------------TEST***********************************/
var list_tokens=["1234567890","0987654321"];  // значения для замены, то есть html документ к примеру шаблон присланный с сервера или исходный текст самой страницы к примеру  
//                  var htmlCode; 
//                  $.get(document.location.href, function(data){htmlCode=data.data});
let html='разные там <b>html</b>елементы. А вот и трока поиска: </b><b id="finish_kar_cri">0x61496a395F549XzxzxZ</b>....' +
    'a вот  еще один такой же элемент(предположим что там class а не id для массового поиска)'
    +'<b id="finish_kar_cri">0x323232323</b>...';

let pattern='<b id="finish_kar_cri">(\\w+)</b>'; // ваша строка поиска в скобках значениыя ддля замены
var res=replaceToken(html,list_tokens,pattern);   // возвращаем имененную строку
         $(document).append(res);        // console.log(res)// результат, измененная   текст с вашим токеном


А это просто работа с самим текущим документов jquery
// token[1] - и будет найденным текстом
var ell=$("#finish_kar_cri");
var lastVal=ell.text(); // запомнили старое значение
ell.text("8496444");
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы