Как перебрать текст и заменить конкретные слова - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь написать простую функцию, которая выполняет итерацию по тексту и заменяет любые ссылки, которые встречаются, вместо текста;

var REPLACE = [
    {expression: www.anyhref.com, value: 'website'}
];

function(instance) {
   instance = function {
       var insteadURL;

       insteadURL: = REPLACE.match(function(expression) {
           return element.classList.contains(expression);
       });

       return(
           insteadURL ? insteadURL.value : getElementText(expression)
       );
   }
}

Мне кажется, что я не правильно использую метод match или условный оператор, но, насколько я понимаю, это должно сработать. Но, конечно, это не так.

Ответы [ 2 ]

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

Если вы находитесь в контексте DOM, вы можете сделать следующее:

Для перебора DOM вы можете использовать эту функцию:

function domReplace(node, iterator) {
  switch (node && node.nodeType) {
  case 1: case 9: case 11: {
    const newNode = iterator((node.nodeName || '').toLowerCase(), node);
    if (newNode && newNode != node && node.parentNode) {
        node.parentNode.insertBefore(newNode, node);
        node.parentNode.removeChild(node);
    }
    for (let child = newNode.firstChild; child; child = child.nextSibling)
       domReplace(child, iterator);
  } break ;
  case 3: {
    const newNode = iterator('#text', node);
    if (newNode && newNode != node && node.parentNode) {
        node.parentNode.insertBefore(newNode, node);
        node.parentNode.removeChild(node);
    }
  } break ;
  }
}

Затем вы можете заменить a, если шаблон соответствует .href с пользовательским текстом:

domReplace(document, (type, node) => {
  if (type == 'a') {
    for (let i = 0; i < REPLACE.length; i += 1)
      if (~(node.href || '').indexOf(REPLACE[i].expression))
         return document.createTextNode(REPLACE[i].value);
    return document.createTextNode(node.href);
  }
  return node;
});

Обратите внимание, что вы не должны указывать document domReplace, а правый dom-узел, чтобы избежать полной замены страницы

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

Если вы пытаетесь заменить ссылки (я полагаю) в вашем тексте, попробуйте следующее регулярное выражение:

   /<a.*?href="www.anyhref.com".*?\/a>/g

Затем вам нужно будет добавить для каждого href, который вы хотите заменить запись в вашем массиве.

...