我正在爲Minecraft服務器製作一個包裝器,並且我一直被困在這一個適用於Ages的正則表達式匹配問題上。基本上我想匹配以下段現在正則表達式與Minecraft控制檯和nodejs
[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中做到這一點?我能想到的唯一方法是使用lookbehinds。做一個JS函數來解析它會更好嗎?如果是這樣,我該如何去做呢?
編輯1:這是我目前正則表達式(?:[§&\d\w ]){0,16}?(\w{3,16})(?:[§&\d\w ]){0,16}
,給定輸入下面的一行:
<§4&btest &r&rKaidenP§r> woo
模式組#1 rKaidenP
。它需要只是KaidenP
只是澄清時你說'rKaidenP'應該是'KaidenP',這是否意味着在用戶名部分應該忽略'§'之後的第一個字符?由於測試輸入中的用戶名似乎是'rKaidenP' – Nico
所以在該符號後忽略一次充電。 –
請注意,截面標誌不應放入日誌中;這是一個錯誤(但不是很快就會得到修復的錯誤)。請參閱[MC-112693](https://bugs.mojang.com/browse/MC-112693),如果您想修復它,請投票表決。還有一個craftbukkit公關,它修復了它(用更奇特的方式,它也修復了幾個關於聊天懸停的功能),這是我寫的,但現在沒有鏈接(如果你有興趣,我會在稍後得到它)。 – Pokechu22