正则表达式:仅匹配最后的方括号

时间:2017-01-08 00:16:22

标签: regex

我正在过滤 JavaScript 中的一些消息,我需要选择最后一个方括号值(包括方括号[])并将其替换为{{1 }}。

举个例子:
: [characterName]: [World] [anything] [any] steamName
想改为:
message

[World] [anything] [any] steamName: message是我希望[characterName]:

回收的内容

我尝试过以下正则表达式:
这个不适用于名称中间的空格 的 \[(\S*?)\]: (link to regexr.com)

如果只有一个[squareBracket],前面有一个空格,只有在链接中可以看到,这个才有效。
\[(.*?)\]: (link to regexr.com)

我需要两者之间的混合,在每种情况下都有效 我希望你能通过以下案例(匹配强词)链接到regexr.com ,为我提供正在寻找的正则表达式,以证明它有效:

: [嗨!我是玩家!1]: Hi!I'm a Player!1
message [嗨!我是管理员]: [VIP] [Admin] Hi!I'm admin
message [播放器]: [VIP] Player
message [(#@#Player!123)]: [VIP] [any] Player
some message [121223]: [VIP] [any] 3number2
{{[1}} [[[[[((某事#]]]: message

我认为重要的是要在冒号之前总是有一个方括号:[Area] [bla] [bla] anyth1ng,这就是我希望它匹配替换。

我希望我已经足够清楚了。随意问任何问题。

3 个答案:

答案 0 :(得分:2)

尝试以下方法:

[HttpPost]
        public JsonResult printUser(User user)
        {
            user.DisplayName = user.DisplayName.Replace("\n", String.Empty);
            user.DisplayName = user.DisplayName.Trim(' ');

            User findUser = UserAdapter.GetUserByUserName(user.DisplayName);

            return Json(new { displayName = findUser.DisplayName});
        } 

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

答案 1 :(得分:1)

对另一个方形braket使用负向前看:

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

整个比赛是你的目标,soyiur repkamwnt字符串是jusr ":"(不需要团体)。

答案 2 :(得分: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);

正则表达式explanation from Regex101

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

  • \[字面匹配字符[(区分大小写)
  • 匹配[^\]]*下方列表中不存在的单个字符
    • *量词 - 在零和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)
    • \]字面匹配字符](区分大小写)
    • \]+字面匹配字符](区分大小写)
    • +量词 - 在一次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)
  • :字面匹配字符:(区分大小写)
  • 全局模式标记
    • g修饰符:全局。所有比赛(首场比赛后不返回)