Regex newbie here! Допустим, у меня есть два массива текста, и я ищу в тексте, который говорит.
let text = This is a cool story.
Я ищу эти фразы в тексте.
ArrBlue = ["cool story"]
ArrGreen = ["This is a cool"]
И я хочу выделить слова в массиве соответствующим цветом. Таким образом, все слова в ArrBlue приведут к тексту синего цвета, а ArrGreen - зеленого. Я создал два новых RegExp примерно так ...
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>
Вот мой быстрый фрагмент, чтобы лучше понять мою ситуацию.
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>