如何迭代文本并替换特定单词

问题描述 投票:0回答:2

我正在尝试编写一个简单的函数来迭代文本并替换它所遇到的任何href;

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)
       );
   }
}

我觉得好像我可能没有正确使用匹配方法或条件运算符,但据我所知,这应该可行。但当然不是。

javascript conditional string-matching
2个回答
0
投票

如果你想在文本中替换链接(我猜),试试这个正则表达式:

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

然后,您必须为每个href添加要替换数组中的条目。


0
投票

如果您在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节点以避免完整页面替换

© www.soinside.com 2019 - 2024. All rights reserved.