Регулярное выражение, которое соответствует точное предложение и отдельные слова? - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть поле ввода, в котором пользователь может искать только слово или предложение.

Скажем, в блоке текста:

Абзацы являются строительными блокамидокументы.Многие студенты определяют абзацы в терминах длины: абзац - это группа, состоящая как минимум из пяти предложений, абзац длиной в полстраницы и т. Д. В действительности, однако, единство и согласованность идей между предложениями - это то, что составляет абзац.Абзац определяется как «группа предложений или одно предложение, которое образует единое целое» (Lunsford and Connors 116).Длина и внешний вид не определяют, является ли раздел в документе абзацем.Например, в некоторых стилях письма, в частности в журналистских стилях, абзац может содержать всего одно предложение.В конечном счете, параграф - это предложение или группа предложений, которые поддерживают одну основную идею.В этом раздаточном материале мы будем называть это «управляющей идеей», потому что она контролирует то, что происходит в остальной части абзаца.

Как пользователь, я печатаю students define paragraph.Я хочу, чтобы регулярное выражение нашло students define paragraph в качестве предложения, а students, define, paragraph.

Ожидаемое

Абзацы являются строительными блоками документов.Многие студенты определяют абзацев в терминах длины: абзац - это группа, состоящая как минимум из пяти предложений, абзац имеет длину в полстраницы и т. Д. В действительноститем не менее, единство и согласованность идей между предложениями составляет то, что составляет параграф . абзац определяется как «группа предложений или одно предложение, составляющее единицу» (Lunsford and Connors 116).Длина и внешний вид не определяют, является ли раздел в документе абзацем .Например, в некоторых стилях письма, в частности в журналистских, абзац может содержать всего одно предложение.В конечном счете, параграф - это предложение или группа предложений, которые поддерживают одну основную идею.В этом раздаточном материале мы будем называть это «управляющей идеей», поскольку она контролирует то, что происходит в остальной части абзаца .

До сих пор я пытался использовать /students(.*?)define?paragraph/gmi, а также помещая их в индивидуальный паратез.Мне сказали сделать не один поиск по регулярному выражению, но это приведет к долгому времени выполнения.Интересно, есть ли способ определить поиск по регулярному выражению.

Также попытался /students(?define)(.*?)paragraph/gmi, но это не возвращает индивидуума, если нет конечной точки для группировки совпадений.

1 Ответ

0 голосов
/ 15 февраля 2019

Вам нужно будет создать регулярное выражение, которое будет содержать вводимые пользователем данные в том виде, в котором они есть, и в дополнение к этому разделить ваш запрос по пробелам и иметь другие токены в качестве альтернатив, чтобы их можно было сопоставлять по отдельности.Кроме того, как я вижу, вы хотите сопоставить и единственную версию, поэтому вам нужно сделать последний s необязательным, изменив students на students?, или вам, возможно, придется работать в большей степени, основываясь на различныхвиды слов, доступных на языке.Для приведенного вами примера поискового запроса students define paragraphs регулярное выражение, которое необходимо найти, будет следующим:

students? define paragraphs?|students?|define|paragraphs?

Демо

Вотфункция, которую вы можете использовать для генерации регулярного выражения, как я упоминал выше,

function createRegex(str) {
  var newStr = str.replace(/s(?:( +)|$)/g,'s?$1');
  var arr = str.split(/ +/g);
  for(s of arr) {
    newStr = newStr.concat('|').concat(s.replace(/s$/g,'s?'));    
  }
  return newStr;
}

console.log(createRegex('students    define paragraphs'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...