【问题标题】:Remove all whitespaces between two characters regex删除两个字符正则表达式之间的所有空格
【发布时间】:2021-01-24 02:47:33
【问题描述】:

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

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

目前代码如下:

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 或正则表达式可以做到这一点。我曾尝试在正则表达式中这样做,但由于我不经常使用正则表达式而失败了。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    请参阅regex demo。详情:

    • (?&lt;=&lt;:[^&lt;&gt;]*?) - 字符串中的位置,前面紧跟&lt;:,然后是除&lt;&gt; 之外的任意数量的字符,尽可能少
    • \s+ - 一个或多个空格
    • (?=[^&lt;&gt;]*&gt;) - 字符串中的一个位置,后面紧跟除&lt;&gt; 之外的任意数量的字符,尽可能多,然后是&gt;

    查看 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, ''));

    【讨论】:

      【解决方案2】:

      如果你不坚持只用一个正则表达式解决你的问题,下面是一个使用两个的解决方案:第一个在&lt;:&gt;之间选择标签,第二个在回调中替换第二个中的所有空格功能。

      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, '')));

      【讨论】:

      • 谢谢!它充当某种“事实检查器”,因为每次带有 <:>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 2018-01-16
      • 1970-01-01
      相关资源
      最近更新 更多