返回

当使用正则表达式包装页面中所有单词的span标记时,正则表达式-Javascript存在问题

发布时间:2022-07-08 05:31:33 240
# 前端

我需要在网页上获取所有单词,并用“span”标记将每个单词包装起来。

我用正则表达式实现了它,但代码测试有3个错误:

错误1:类属性值;文本“;span标记包装错误,不是页面内的文本

错误2:;istest“;是一个单词,中间没有空格,但被代码分成两个单词,并且;是“;未被跨度包裹。

错误3:;[]和;不是通过正则表达式解决的,我尝试将“[]”添加到包装span标记的正则表达式中,但它导致了更大的错误,奇怪的是;{}()”;工作正常。


 

正确的测试结果是网页上所有的文字背景都变灰了,目前还没有达到。

// remove duplicates from an array
function unique(arr) {
  for (var i = 0; i < arr.length; i++) {
    for (var j = i + 1; j < arr.length; j++) {
      if (arr[i] == arr[j]) {
        arr.splice(j, 1);
        j--;
      }
    }
  }
  return arr;
}

// Wrap 'span' tags around all words
function add_span(word_array, element_) {
  for (let i = 0; i < word_array.length; i++) {
    // ????????????????Regular expression cannot join \[\]
    var reg_str = "([ \s\t\r\n.?,\"\';:!(){}<>\/]|\xa0|\x20|\u3000| )";
    var reg = new RegExp(reg_str + "(" + word_array[i] + ")" + reg_str, 'g');
    element_ = element_.replace(reg, '$1$2$3');
  }
  return element_;
}

window.onload = function() {
  console.log(document.body.innerText); // all text in body
  // text to word array
  var word_array = document.body.innerText.split(/[ \s\t\r\n.?,\"\';:!()\[\]{}<>\/]|\xa0|\x20|\u3000| /);
  word_array = word_array.filter(e => e != ''); // remove empty values
  word_array = unique(word_array); // remove duplicate values
  console.log(word_array);

  // Wrap 'span' tags around all words
  var text_html = add_span(word_array, document.body.innerHTML);
  document.body.innerHTML = text_html;
  console.log(text_html);
}
span {
  background: #ccc;
}
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像