Регулярное выражение соответствует предложению в абзаце, который содержит новые строки - PullRequest
0 голосов
/ 02 мая 2018

У меня в основном есть абзац текста в HTML-div. Нажав / активировав кнопку, я бы хотел выделить текст определенной длины. Следовательно, мне нужно найти его индекс и добавить к ним пролеты с class = highlight.

Следовательно, я хотел бы сопоставить предложение в тексте innerHtml, например:

var text = "The quick brown fox jumps over the lazy dog".

Тем не менее, абзац может сократить предложение до нескольких строк, таких как:

innerHTML = 
"The quick brown 
fox jumps over 
the lazy dog"

И я в любом случае не могу "скрыть" внутренний HTML, например, удалить пробелы / новые строки из текста.

Я не могу придумать или найти правильную последовательность регулярных выражений для реализации этого.

Это не работает:

var search_regexp = new RegExp(text, 'm');
innerHTML.search(search_regexp);

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Ну, вот как бы я это сделал.

Просто разделите текст на \n, а затем соедините с " ", чтобы придать ему формат предложения из одной строки. Теперь вы можете использовать .include , чтобы проверить, является ли текст, который вы хотите сопоставить, частью другого текста или нет

var text = "The quick brown fox jumps over the lazy dog",
    stringWithBreakLines = `The quick brown
fox jumps over
the lazy dog
this is some additional
text in html`;
 
console.log(stringWithBreakLines.split("\n").join(" ").includes(text))
0 голосов
/ 02 мая 2018

При поиске любого пробела, разбитого на слова (не только пробелы), вам необходимо заменить пробелы в шаблоне поиска обычными жетонами пробелов. Это будет работать:

var regex = text.split(/\s+/).join('\\s+');
var search_regexp = new RegExp(text, 'm');
innerHTML.search(search_regexp);

Эффект split(/\s+/).join('\\s+'):

  1. Разбить входной текст на любое количество пробелов, создав массив слов
  2. Объедините слова с помощью \s+ токена регулярного выражения, который соответствует одному или нескольким пробельным символам. это включает в себя новые строки и вкладки
0 голосов
/ 02 мая 2018

Вы можете replace перевод строки в обоих один пробел и match.

var fnReplaceLR = ( str ) => str.replace(/\s+/g, " " ); //method to replace line-breaks and other consecutive multiple spaces with single space.
var text = "The quick brown fox jumps over the lazy dog";
var innerHTML = 
`The quick brown 
fox jumps over 
the lazy dog`;
var search_regexp = new RegExp( fnReplaceLR( text ) ); //no need for m modifier now
fnReplaceLR( innerHTML ).match( search_regexp ); //match the string

Демо

var fnReplaceLR = (str) => str.replace(/\s+/g, " "); //method to replace line-breaks and other consecutive multiple spaces with single space.
var text = "The quick brown fox jumps over the lazy dog";
var innerHTML =
  `The quick brown 
    fox jumps over 
    the lazy dog`;
var search_regexp = new RegExp(fnReplaceLR(text)); //no need for m modifier now
var output = fnReplaceLR(innerHTML).match(search_regexp); //match the string
console.log(output);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...