【发布时间】:2018-12-13 11:04:19
【问题描述】:
这里是正则表达式新手!假设我有两个文本数组,我正在搜索一个文本,上面写着。
let text = This is a cool story.
我在文本中寻找这些短语。
ArrBlue = ["cool story"]
ArrGreen = ["This is a cool"]
我想用相应的颜色突出显示数组中的单词。因此,ArrBlue 中的所有单词都会导致文本为蓝色,ArrGreen 为绿色。我像这样创建了两个新的正则表达式..
let regexBlue = new RegExp(arrBlue.join('|'), "ig)
let regexGreen = new RegExp(arrGreen.join('|'), "ig)
然后我使用这些新变量来替换文本,就像将 span 标签附加到匹配表达式的开头和结尾一样。
let newText = text.replace(regexBlue, "<span class='blue'>$&</span>")
.replace(regexGreen, "<span class='green'>$&</span>")
我遇到的问题是我希望我的 html 看起来像这样..
<span class="blue">This is a<span class="green" cool story </span> </span>
但实际上我得到的是
This is a <span class="green">cool story</span>
这是我的快速 sn-p,以更好地了解我的情况。
let greenListArray = ["cool story"];
let blueListArray = ['This is a cool'];
$("#myform").submit(function(event){
event.preventDefault();
$('#results').html('');
let text = $('textarea#textEntered').val();
highlightText(text);
});
function highlightText(text){
let regexGreen = new RegExp(greenListArray.join('[,!?.]?|'), "ig");
let regexBlue = new RegExp(blueListArray.join('[,!?.]?|') + "ig");
let newText = text.replace(regexGreen, "<span class='green'>$&</span>")
.replace(regexBlue, "<span class='blue'>$&</span>");
$('#results').html(newText);
}
.blue{
background-color: red;
font: red;
}
.green{
background-color: green;
}
.greyHighlight:hover{
background-color: grey;
color: white;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="myform">
<fieldset>
<textarea name='textEntered' id='textEntered' />This is a cool story.</textarea>
<button type='submit' class="bttn">Enter</button>
</fieldset>
</form>
<div class="results-container"> <span class="results-title">Highlighted Text:</span> <div id="results"> </div> <br> </div>
<div class="wantedResults">
Results I wish to have <br>
<span class="blue">This is a</span><span class="green">cool story</span>
</div>
【问题讨论】:
-
看起来它已经正常工作了!
-
不,如果您在表单上按回车键,“突出显示的文本”下方是实际结果,与我在下面的结果不同。 “我希望得到的结果”下面的文本是硬编码的。
-
是的。但我通过提供
Hello cool story进行了检查,得到了结果,发现 HTML 结构符合预期。 -
但这不是我想要解决的问题。问题是当两个数组中的单词重叠时,只有顶部的单词会被 span 标签而不是两者替换。
标签: javascript regex overlapping-matches