2017-01-08 123 views
0

我在過濾一些消息的JavaScript,我需要選擇最後一個括號值(包括括號[]),並與:更換。正則表達式:僅匹配最後括號

舉個例子:
[World] [anything] [any] steamName[characterName]:message
想改變:
[World] [anything] [any] steamName: message

[characterName]:是我想通過一個:

我被reclaced什麼我嘗試了以下正則表達式:
這個名稱中間沒有空格。
\[(\S*?)\]: (link to regexr.com)

這其中只有當只有一個[squareBracket]有它面前的空間,你可以在鏈接看的作品。
\[(.*?)\]: (link to regexr.com)

我需要像在任何情況下工作兩者之間的混合。
我希望你能爲我提供我與鏈接尋找正則表達式來regexr.com 與下列情況下(匹配叫板)證明它的工作原理:

Hi!I'm a Player!1[您好我! 「M播放機使用1]:message
[VIP] [Admin] Hi!I'm admin[嗨,我是管理員]:message
[VIP] Player[播放]:message
[VIP] [any] Player[(#@#播放器123!)]:some message
[VIP] [any] 3number2[121223]:message
[Area] [bla] [bla] anyth1ng[[[[[[((東西#]]]:message message message

我認爲重要的是要添加一個冒號前面的方括號:[this]:,這正是我希望它匹配替換的地方。

我希望我已經清楚了。隨意問任何問題。

+0

你最後一種情況:將打開/關閉括號總是被耦合在一起,或者也可以是瘋狂的混合。如果後者,如何確定,究竟屬於什麼內部和外部什麼? –

+0

是否最後一個'[]'後面總是跟着':'? (如果這麼看@馬斯洛的答案) – BrunoLM

+0

爲什麼是負面的?我想我的問題不清楚嗎?希望我應該改進它? –

回答

1

var msg = `Hi!I'm a Player!1[Hi!I'm a Player!1]:message 
 
[VIP] [Admin] Hi!I'm admin[Hi!I'm admin]:message 
 
[VIP] Player[Player]:message 
 
[VIP] [any] Player[(#@#Player !123)]:some message 
 
[VIP] [any] 3number2[121223]:message 
 
[Area] [bla] [bla] anyth1ng[[[[[[((something#]]]:message message message`; 
 

 
var newMsg = msg.replace(/\[[^\]]*\]+:/g, ': '); 
 

 
console.log(newMsg);

的Regex explanation from Regex101

/\[[^\]]*\]+:/g

  • \[字符[字面上(區分大小寫)
  • 匹配單個字符在不存在匹配根據需要(貪婪)
  • \]
  • \]+匹配的字符]字面上(區分大小寫)與零和無限次,多次地,用之於之間的較量 - 列表下方[^\]]*
    • *量詞字符]字面意思(區分大小寫)
    • +量詞 - 匹配一次和無限次,儘可能多的次數,根據需要回饋(貪婪)
    • 全球:
  • :字符:字面上(區分大小寫)
  • 全球格局的標誌
    • g修改相匹配。所有的比賽(第一場比賽後不返回)
+0

這正是我所期待的。 @馬斯洛的答案,但它仍然是其他語言好。 –

2

嘗試以下操作:

\[[^]]*\]+: 

https://regex101.com/r/f0GHkK/1

+0

看來這不適用於JavaScript。 –

+1

@JoseSerodio嘗試'\ [[^ \]] * \] +:',他只是忘了逃跑']'('\]') – BrunoLM

+0

@BrunoLM真棒,它的伎倆!感謝你們。 –

1

使用負前瞻另一個方託槽:

\[[^\]]*\](?!.*]) 

全場比賽是你的目標,soyiur repkamwnt串jusr ":" (不需要團體)。

+0

差不多,但它並沒有在過去的情況下工作。看起來,如果你在方括號內放置另一個']'將不匹配:'[something]]' –

+0

你需要一個解析器。正則表達式無法處理任意嵌套。你改變了這個問題。我出去了。 – Bohemian