删除两个字符正则表达式之间的所有空格

时间:2020-10-09 02:03:19

标签: javascript node.js regex discord discord.js

我有一个翻译机器人,最近我对其进行了修改,以允许自定义表情符号(翻译程序会在各处添加空格,并将表情符号名称翻译为不受支持的格式)

我现在的问题是它并不总是能按需运行,我想添加一个“过滤器”以删除自定义表情符号的所有空格,而表情符号则删除正则表达式中可能遗漏的任何空格声明是否未触发。

当前代码的工作方式如下:

The Regex Editor Can Be Found Here

const regex = /<([:+\s:\s*[a-z0-9ЁёА-я_\s]+:\s*)([0-9\s]+)>/gmi;
const str = "<: Gelb: 590653333124022288><:Gelb: 590653333124022288><: Gelb: 590653333124022288> <: Gelb: 590653333124022288><: Gelb: 590653333124022288><: Gelb: 590653333124022288> <: Gelb: 590653333124022288> <: Gelb: 590653333124022288><: gelb : 590653333124022288> <: Gelb: 590653333124022288> <: Gelb: 590653333124022288><: Gelb: 590653333124022288> <: Rot  : 538473333124022288> <: Gelb: 590653333124022288>"
const subst = `<:okthisisanemoji:$2>`;

console.log(str.replace(regex, subst));

(编辑,我将所有表情符号名称都更改为:okthisisanemoji:的原因是,我不必处理不和谐的无法发送的翻译后的表情符号名称,例如,不和谐不能发送俄语字母的表情符号)

有人可以帮我修改/创建新的正则表达式语句吗, 会删除字符“ <”和“>”之间的所有空格?

很抱歉,如果以上解释有误导性,请让我澄清一下。删除“ <”和“>”之间的所有空格,否则保留字符串的其余部分,并全局删除“ <”和“>”。

我也曾尝试在网上寻求帮助,但也不一致,但对于执行此操作的javascript或regex语句则一无所获。我曾尝试在正则表达式中执行此操作,但由于我不经常使用正则表达式而导致失败。

现在的源代码在这里:https://github.com/Zyc0r3/RitaBot/tree/test-branch src / core / send.js具有上面的代码。

2 个答案:

答案 0 :(得分:1)

如果您不坚持只用一个正则表达式来解决问题,以下是使用两个正则表达式的解决方案:首先选择<:>之间的标签,其次替换列表中的所有空格在回调函数中排名第二。

const input = `<: Gelb: 590653333124022288>
<:Gelb: 590653333124022288>
<: Gelb: 590653333124022288> 
<: Gelb: 590653333124022288>
<: Gelb: 590653333124022288>
<: Gelb: 590653333124022288> 
<: Gelb: 590653333124022288> 
<: Gelb: 590653333124022288>
<: gelb : 590653333124022288> 
<: Gelb: 590653333124022288> 
<: Gelb: 590653333124022288>
<: Gelb: 590653333124022288> 
<: Rot  : 538473333124022288> 
<: Gelb: 590653333124022288>"`;

console.log(input.replace(/<:.+?>/g, tag => tag.replace(/\s+/g, '')));

答案 1 :(得分:1)

您可以使用一个基于环视的正则表达式:

string.replace(/(?<=<:[^<>]*?)\s+(?=[^<>]*>)/g, '')

请参见regex demo。详细信息:

  • (?<=<:[^<>]*?)-字符串中的位置,紧随<:之后,然后是<>以外的任意数量的字符,请尽可能少
  • \s+-一个或多个空格
  • (?=[^<>]*>)-字符串中的位置,紧随其后的是除<>以外的任意数量的字符(尽可能多的字符),然后是>。 / li>

请参见JavaScript演示

const regex = /(?<=<:[^<>]*?)\s+(?=[^<>]*>)/g;
const str = "<: Gelb: 590653333124022288><:Gelb: 590653333124022288><: Gelb: 590653333124022288> <: Gelb: 590653333124022288><: Gelb: 590653333124022288><: Gelb: 590653333124022288> <: Gelb: 590653333124022288> <: Gelb: 590653333124022288><: gelb : 590653333124022288> <: Gelb: 590653333124022288> <: Gelb: 590653333124022288><: Gelb: 590653333124022288> <: Rot  : 538473333124022288> <: Gelb: 590653333124022288>"
console.log(str.replace(regex, ''));