Групповой массив с двумя словами, а не с одним - PullRequest
1 голос
/ 08 июня 2019

КОД НИЖЕ: Когда слово написано, оно сохраняет его как свой собственный массив, то есть каждое отдельное слово является своим собственным массивом, а затем проверяется на повторения.

Что я хочу: вместо того, чтобы создавать массив слов (после пробела), я хочу, чтобы он делал это после того, как были написаны 2 слова.

IE: вместо меня я пишу "Hello" + пробел и код, создающий "hello" в виде массива.Я хотел бы подождать, пока я не напишу «здравствуй мой» + пробел, а затем создать массив с этими двумя числами.

Я предполагаю, что это как-то связано с регулярным выражением?Я пробовал много разных вещей (немного новичка), и я не могу понять, как заставить его сгруппировать 2 слова вместе, а не одно.

  const count = (text) => {

    const wordRegex = new RegExp(`([\\p{Alphabetic}\]+)`, 'gu');
    let result;
    const words = {};
    while ((result = wordRegex.exec(text)) !== null) {
      const word = result[0].toLowerCase();
      if (!words[word]) {
        words[word] = [];
      }
      words[word].push(result.index);
      words[word].push(result.index + word.length);
    }
    return words;
  };

1 Ответ

1 голос
/ 08 июня 2019

Вы можете использовать

const wordRegex = /\p{Alphabetic}+(?:\s+\p{Alphabetic}+)?/gu;

Подробности

  • \p{Alphabetic}+ - 1+ буквенных символов
  • (?:\s+\p{Alphabetic}+)? - anнеобязательная последовательность:
    • \s+ - 1+ пробелов
    • \p{Alphabetic}+ - 1+ буквенных символов

Второе словоопционально, чтобы совпадать и с последним нечетным словом.

См. Демонстрационную версию JS ниже:

 const count = (text) => {

    const wordRegex = /\p{Alphabetic}+(?:\s+\p{Alphabetic}+)?/gu;
    let result;
    const words = {};
    while ((result = wordRegex.exec(text)) !== null) {
      const word = result[0].toLowerCase();
      if (!words[word]) {
        words[word] = [];
      }
      words[word].push(result.index);
      words[word].push(result.index + word.length);
    }
    return words;
  };
  
  console.log(count("abc def ghi"))

Способ конструктора RegExp для определения этого регулярного выражения:

const wordRegex = new RegExp("\\p{Alphabetic}+(?:\\s+\\p{Alphabetic}+)?", "gu");

Однако, поскольку шаблон является статическим, для его построения не используются переменные,Вы можете использовать буквенное обозначение регулярного выражения, как показано в верхней части ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...