Поиск регулярных выражений Javascript

#javascript #regex

#javascript #регулярное выражение

Вопрос:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script>

str = "This is an apple and I love it.";

function searching(query){
    var patt = new RegExp(query,"gi");
    var query = "<span style='color: red'>" query "</span>";
    document.getElementById("text").innerHTML = str.replace(patt,query);
    return str = document.getElementById("text").innerHTML;
    }

/*
patt1 = new RegExp("is","gi");
patt2 = /sans/gi;
document.write(str.replace(patt2,"<span style='color:red'> are </span>"));
*/
</script>
</head>
<body>
<div id="text"><script>document.write(str)</script></div>
<form>
<input type="text" id="querys" value="" onkeyup="searching(this.value)" />
</form>
</body>
</html>
  

Я хочу, чтобы после каждого поиска результат заменял исходную строку на hightlight (красный).
Например,
Впервые я ищу «apple».
в строке выделено «apple».
Верните строку в div с красным выделением.
Во второй раз я ищу «есть»
«is» выделено красным в строке.

Я пытался использовать innerHTML, но innerHTML также возвращает встроенные теги стиля CSS.

Ответ №1:

Я не понимаю цели этой строки:

 return str = document.getElementById("text").innerHTML;
  

str Используется где-то еще? В этом случае вам может потребоваться сохранить две отдельные переменные: одну для исходной строки (по которой вы будете выполнять поиск) и одну для измененной строки с <span> тегами.

Комментарии:

1. Нет. Я просто хотел установить str в качестве нового str после того, как str был заменен выделенным текстом. И новый поиск основан на выделенном тексте. Моим первоначальным намерением было выполнить поиск по последнему результату поиска с высоким разрешением.

2. @TinAmaranth: Извините, я вообще не понимаю, что вы пытаетесь сделать. :-/

3. Во-первых, пользователь выполняет поиск «string1»; во-вторых, строка «string1» выделяется в тексте желтым цветом; в-третьих, пользователь выполняет поиск «string2»; В-четвертых, выделяется «string2». Дело в том, что последний выделенный текст («string1») остается. Теперь мой случай заключается в том, что выделенная строка 1 исчезает после того, как пользователь выполняет поиск string2.

4. Я не думаю, что вы можете сделать это согласованно так, как вы изложили. Вы делаете все это при вводе, и пользователь не может указать, что данная строка поиска завершена; поэтому, говоря «сначала пользователь ищет ‘string1′», вы на самом деле имеете в виду «сначала пользователь ищет ‘s’, затем ‘st’, затем ‘str’ . . .». Само по себе это не проблема, но если вы оставите все старые строки поиска по-прежнему выделенными, то каждое вхождение «s» останется выделенным даже после того, как пользователь наберет все «string1» .

5. Итак … сохранение старого выделения поиска никоим образом не возможно?