Итак, я работаю с ботами разногласий, и я хотел создать выражение 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
, и я понял, как удалить первое слово. Теперь я хочу, чтобы привет там был отфильтрован. Я хочу, чтобы результат был ['привет', 'привет', 'небо', 'привет']. Я знаю, что это сложно, но я пробовал все, и я просто не могу отфильтровать привет. Спасибо!
Вы можете попробовать использовать замену регулярного выражения для очистки, а затем простое разделение:
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
Почему вы не удаляете второй
'hi'
, учитывая, что после него не стоит запятая?