15.12.2019, 18:28
|
Интересующийся
|
|
Регистрация: 13.12.2019
Сообщений: 14
|
|
рони,
ахах, хорошо, не буду больше присылать картинки, раз Вам это не нравится)
Думал так понятнее для отображения ожидаемого результата)
Пример:
исходная строка
главный врач 12345 главный сан врач
искомые совпадения
гл вр
главный врач 12345 главный сан врач
Вот пример с картинки) Такое не сработает на данный момент если добавить слово между "главный" и "врач"
|
|
15.12.2019, 18:44
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Adrikks,
картинка это замечательно пусть будет, но
для проверки необходим текст.
|
|
15.12.2019, 19:26
|
Интересующийся
|
|
Регистрация: 13.12.2019
Сообщений: 14
|
|
рони,
Понял)
В общем суть в том, что должны выделяться последовательности искомых подстрок вне зависимости от кол-ва символов между ними
Был бы очень благодарен, если бы подсказали как это можно сделать
|
|
15.12.2019, 19:44
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Adrikks,
нужен алгоритм. пока не знаю короткой дороги.
|
|
15.12.2019, 22:09
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
поиск совпадений в последовательности слов
Adrikks,
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
label {
display: flex;
flex-direction: column;
}
#result mark {
color: #FF0000;
}
</style>
</head>
<body>
<label>
Исходная строка:
<input id="text" placeholder="Введите текст..." value="главный врач 12345 главный сан врач">
</label>
<label>
Искомые совпадения:
<input id="search" placeholder="Введите текст..." value="гл вр">
</label>
<p id="result"></p>
<script>
RegExp.escape = s => s.replace(/[[\\^$.|?*+()]/gim, "\\$&");
function mark(string) {
const node = document.createElement("mark");
node.textContent = string;
return node;
}
search.addEventListener("input", () => {
const value = text.value.match(/\s+|\S+/g);
let parts = search.value.trim();
const length = parts.length;
if(!value || !length) {result.textContent = text.value; return};
parts = parts.split(/\s+/).map(pattern => new RegExp("(\\S*?)(" +RegExp.escape(pattern) +")(\\S*)", "i"));
result.textContent = "";
let temp = [];
for (let i = 0; i < value.length; ) {
let k = i, arrFindIndex = [];
let found = parts.every(reg => {
let index = value.slice(k).findIndex(el => reg.test(el));
if(index === -1 ) return false;
k += index;
arrFindIndex.push({k,reg});
k++;
return true
});
if(found) {i = k; temp.push(...arrFindIndex)}
else i++;
}
value.forEach((el, i) => {
const find = temp.find(({k}) => k == i);
if(find){
const {reg} = find;
[_, ...el]= el.match(reg);
el[1] = mark(el[1])
result.append(
...el
)
}
else result.append(el)
})
});
search.dispatchEvent(new Event("input"));
</script>
</body>
</html>
Последний раз редактировалось рони, 16.12.2019 в 02:04.
|
|
16.12.2019, 08:32
|
Интересующийся
|
|
Регистрация: 13.12.2019
Сообщений: 14
|
|
рони,
последовательность из двух символов находится везде, а из одного допустим, только один раз
Пример как должно:
Исходный текст:
АЛИЕВА БАЙНАТ АБДУРАХМАНОВНА
Искомые совпадения:
а б
Результат:
АЛИЕВА БАЙНАТ АБДУРАХМАНОВНА
|
|
16.12.2019, 08:42
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Сообщение от Adrikks
|
последовательность из двух символов находится везде, а из одного допустим, только один раз
|
я пас. вы третий раз изменили условия.
|
|
16.12.2019, 11:38
|
Интересующийся
|
|
Регистрация: 13.12.2019
Сообщений: 14
|
|
рони,
Я понимаю) Я не знаю как вам объяснить всё это в одном алгоритме
По этому и кидал картинку
Последний раз редактировалось Adrikks, 16.12.2019 в 18:40.
|
|
16.12.2019, 15:45
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Adrikks,
Сообщение от Adrikks
|
Исходный текст:
АЛИЕВА БАЙНАТ АБДУРАХМАНОВНА
Искомые совпадения:
а б
Результат:
АЛИЕВА БАЙНАТ АБДУРАХМАНОВНА
|
результат вашего выделения неверный!!!
должно быть так
<p id="result"><mark>А</mark>ЛИЕВА <mark>Б</mark><mark>А</mark>ЙНАТ А<mark>Б</mark>ДУРАХМАНОВНА</p>
Последний раз редактировалось рони, 16.12.2019 в 15:48.
|
|
16.12.2019, 16:12
|
Интересующийся
|
|
Регистрация: 13.12.2019
Сообщений: 14
|
|
рони,
Я вам показал, как по заданному мне заданию)
Ну хотя бы с вариантом представленным у вас, помогите пожалуйста)
Больше не побеспокою Вас
|
|
|
|