Как использовать регулярное выражение для фильтрации всего, что не имеет запятой?

Итак, я работаю с ботами разногласий, и я хотел создать выражение RegEx, которое удаляло бы все слова без запятой после него. В настоящее время это мой код:

const { content } = message;
var argsc = content.split(/[,]+/);
argsc.shift();
console.info(argsc); //returns [ 'hello', 'sky', 'hi hello there' ]

Исходное сообщение +template hi,hello,sky,hi hello there, и я понял, как удалить первое слово. Теперь я хочу, чтобы привет там был отфильтрован. Я хочу, чтобы результат был ['привет', 'привет', 'небо', 'привет']. Я знаю, что это сложно, но я пробовал все, и я просто не могу отфильтровать привет. Спасибо!

Почему вы не удаляете второй 'hi', учитывая, что после него не стоит запятая?

Cary Swoveland 13.12.2020 07:21
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
1
289
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете попробовать использовать замену регулярного выражения для очистки, а затем простое разделение:

var input = "hi,hello,sky,hi hello there";
input = input.replace(/(\S+)(?: [^\s,]+)*(?=,|$)/g, "$1");
var parts = input.split(",");
console.info(parts);

Вот объяснение шаблона регулярного выражения:

(\S+)          match a "word" AND capture it in $1
(?: [^\s,]+)*  followed by zero or more "words," making sure that we 
               don't hit a comma
(?=,|$)        match until hitting either a comma or the end of the input

Затем мы заменяем только первым захваченным словом.

Ответ принят как подходящий

Использовать

const s = "hi,hello,sky,hi hello there";
console.info(s.split(/(?:^|,)([^\s,]+)(?:\s+[^\s,]+)*/).filter(Boolean));

См. доказательство регулярных выражений.

Объяснение выражения

--------------------------------------------------------------------------------
  (?:                      group, but do not capture:
--------------------------------------------------------------------------------
    ^                        the beginning of the string
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    ,                        ','
--------------------------------------------------------------------------------
  )                        end of grouping
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    [^\s,]+                  any character except: whitespace (\n,
                             \r, \t, \f, and " "), ',' (1 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  (?:                      group, but do not capture (0 or more times
                           (matching the most amount possible)):
--------------------------------------------------------------------------------
    \s+                      whitespace (\n, \r, \t, \f, and " ") (1
                             or more times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
    [^\s,]+                  any character except: whitespace (\n,
                             \r, \t, \f, and " "), ',' (1 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
  )*                       end of grouping

Другие вопросы по теме