识别包含关键字的字符串

时间:2018-11-15 15:25:11

标签: javascript html arrays regex

如何修改脚本,以突出显示包含由多个定界符分隔的关键字的行

我不是程序员,但我需要简化工作。 我发现了一个小脚本,突出显示了包含淫秽字词的红线。然后我手动复制并保存行,以防万一。

但是,我想使它自动化。我在互联网上找不到任何类似的东西。因此,我试图用自己的双手制作一个脚本。这是我所做的:

 function extractText(str,delimiter){
   if (str && delimiter){
     var firstIndex = str.indexOf(delimiter)+1;
     var lastIndex = str.lastIndexOf(delimiter);
     str = str.substring(firstIndex,lastIndex);
   }
   return str;
 }
 
 const keywordsString = ""+
 "stopword|stopword1|stopword2";
 const keywords = keywordsString.split(/#/);
 
 
 const pattern = new RegExp(`(${keywords.join('#')})`, 'g'); 
 
 const phrase = ""+
 "I like cake, pie and<br>cookies keyword keyword<br> stopword<br>";
 
 const result = phrase.replace(pattern, match => `<span style='background-color:red'>${match}</span>`);
 
 setTimeout(function(){
 document.getElementById('prep').innerHTML = result;
 
 if (result.indexOf("span") != -1){
   alert(extractText(result),'&#10');
   document.getElementById('prex').innerHTML = extractText(result,'<br>');
   alert("found");

   }
 }, 100);
<pre id="prep" contenteditable="true"></pre>
<pre id="prex" contenteditable="true"></pre>

我无法用\ n替换br。 我可以在单词之间选择文本,但是如何使脚本获得包含停用词的所有行。 然后,我需要将它们放在另一个文本块中,并在第一个块中将其删除。

起初,我想让脚本将\ n包含脏话的行按脏话词的数量排序,但是这非常困难,我什至没有选择文本。 在那里,您需要使用类似于Levenshtein距离的方法。

我至少需要找出如何获取一组包含以\ n分隔的停用词的文本行。然后,我可以尝试解决其余的问题。

   Input
   line of text with words without stopword(two or more)
   line of text with words and <span style='background-color:red'>stopwords</span>
   line of text with words without stopword
   line of text with words and <span style='background-color:red'>stopwords</span>...<span style='background-color:red'>stopwords</span>(two or more)
   line of text with words without stopword

   output1(Filther words)
   line of text with words without stopword(two or more)
   line of text with words without stopword
   line of text with words without stopword

   output2
   line of text with words and <span style='background-color:red'>stopwords</span>
   line of text with words and <span style='background-color:red'>stopwords</span>...<span style='background-color:red'>stopwords</span>(two or more)

我想将所有包含停用词的消息保存到另一个标签。只留下不包含它们的那些。 我需要包含停用词的filher行

1 个答案:

答案 0 :(得分:0)

使用下面的代码,我从第一个蓝色文本区域中提取行,并将它们分成红色(不良)和绿色(良好)文本区域。

var myLines = $("#s").val().split("\n");

const badWords = ["kaka", "saka", "baka"];
// here we use \bKEYWORD\b in order to keep whole words only
let myExp = new RegExp("(\\b" + badWords.join("\\b)|(\\b") + "\\b)", "g");

var goodLines = [];
var badLines = [];

for (let line of myLines) {
  if (line.match(myExp)) {
    badLines.push(line);
  } else {
    goodLines.push(line);
  }
}

$("#r1").val(goodLines.join("\n"));
$("#r2").val(badLines.join("\n"));
#s {background: lightblue;}
#r1 {background: lightgreen;}
#r2 {background: red;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea rows="7" id="s" >
line ok
line nok kaka
ok row
  baka this row
sakalento row
lento 'saka' badddd
</textarea>
<textarea rows="5" id="r1"></textarea>
<textarea rows="5" id="r2"></textarea>

要将所有出现的“ <br>”替换为“ \n”,您可以执行以下操作

myString.replace(new RegExp(myDelimiter, 'g'), toReplaceChar)

控制台示例:

>'abc<br>1<br>2<br>3t<br>yyy'.replace(new RegExp("<br>", 'g'), "\n")
"abc
1
2
3t
yyy"