javascript - 使用 Minecraft 控制台和 Nodejs 进行正则表达式

标签 javascript regex node.js minecraft

我正在为我的世界服务器制作一个包装器,我已经被这个正则表达式匹配问题困扰了很长时间。基本上我想匹配以下片段

[04:57:40] [Server thread/INFO]: <§c§lAdmin §7§oUser1§r> msg
[04:57:50] [Server thread/INFO]: <§c§lAdmin §7§oUser2§r> msg
[04:58:16] [Server thread/INFO]: <§c§lAdmin §7§oUser1§r> msg
[04:58:28] [Server thread/INFO]: <§4§lCoOwner §7§oUser2§r> msg
[04:58:33] [Server thread/INFO]: <§c§lAdmin §7§oUser1§r> msg
                                  ^-------------------^<--That

现在,对于那些不熟悉 Minecraft 用户名的人来说,分为三个部分:

  • 前缀:由 0-16 个字符组成,包括“§”。 '§' 后面必须跟一个字母或数字。
  • 用户名:字母、数字和下划线,长度在 3 到 16 个字符之间。 [\w\d]{3,16} 轻松满足此要求。
  • 后缀:与前缀相同

因此,在上述内容中,我需要将这 3 个部分分开。

有没有办法在 JS RegExp 中做到这一点?我能想到的唯一方法是使用后视。做一个JS函数来解析这个会更好吗?如果是这样,我该怎么做?

编辑1:这是我当前的正则表达式(?:[§&\d\w ]){0,16}?(\w{3,16})(? :[§&\d\w ]){0,16},给定以下输入行:

<§4&btest &r&rKaidenP§r> woo

模式组#1 是rKaidenP。它需要只是 KaidenP

最佳答案

如果我正确理解§之后的下一个字符,并且 & 应该被忽略:

所以我会这样做:

const getMessageInfo = line => {
  line = line.replace(/[\&§]./g, '')
  const info = line.match(/<(\S+)\s*(\S+?)?>\s(.*)/)
  return {
    role: info[2] ? info[1] : 'User',
    username: info[2] || info[1],
    message: info[3]
  }
}

const data = [
'[04:57:40] [Server thread/INFO]: <Admin User1> msg',
'[04:57:50] [Server thread/INFO]: <Admin User2> msg',
'[04:58:16] [Server thread/INFO]: <Admin User1> msg',
'[04:58:28] [Server thread/INFO]: <CoOwner User2> msg',
'[04:58:33] [Server thread/INFO]: <Admin User1> msg',
'[04:58:33] [Server thread/INFO]: <User1> msg',
'<§4&btest &r&rKaidenP§r> woo'
]

for (const line of data) {
  const msg = getMessageInfo(line)
  console.log(line)
  console.log(msg)
}

关于javascript - 使用 Minecraft 控制台和 Nodejs 进行正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42687613/

相关文章:

javascript数组推送问题

regex - URL中作为参数传递的特殊字符

Java正则表达式问题

javascript - 选择整个字典的值

javascript - 当鼠标悬停在元素上时,div 上的鼠标移动会发生变化

regex - 如何使用正则表达式拆分不同版本的日期模式?

javascript - NodeJS Express : How can I get my object to build completely before sending it in the response?

node.js - 在expressJS应用程序中进行身份验证

javascript - WebStorm IDE 文件监视 CoffeeScript 创建一个空文件

javascript - 带有 sass 插件的 Gruntfile.js 不会缩小所有 scss 文件