令牌后匹配短语

时间:2015-07-28 01:09:06

标签: javascript regex

我有一个来自IRC聊天消息的字符串,看起来像这样

!addcom !commandName This is a command response

或者也可能看起来像这样

!addcom -ul=mod !commandName This is a command response

基本上我需要在第二个!commandName之后得到整个短语,并且我有一些问题想出如何在!commandName之后的空格之后立即开始以获得剩余的短语。

我在一个正则表达式测试器中开始使用它并能够选择第二个!commandName,但现在我需要弄清楚如何获取其余的字符串。

 !+\w+

2 个答案:

答案 0 :(得分:4)

这很容易。使用带有捕获组的否定字符类

![^ ]+\s*([^!]+)$
  • 捕获组1将包含数据。

  • [^ ]+匹配空格以外的任何内容。此模式与!

  • 后面的命令匹配
  • ([^!]+)否定字符类,匹配!以外的任何内容。这种否定确保它选择第二个!something

  • $将正则表达式锚定在字符串的末尾。

Regex Demo

示例

"!addcom -ul=mod !commandName This is a command respons".match(/![^ ]+\s*([^!]+)$/)[1]
=> "This is a command respons"

"!addcom !commandName This is a command respons".match(/![^ ]+\s*([^!]+)$/)[1]
=> "This is a command respons"

答案 1 :(得分:2)

另一种选择是替换你不想要的初始子字符串。

.*令牌会占用所有字符,直到最后一次出现!<word>

var s = '!addcom !commandName This is a command response',
    r = s.replace(/.*!\w+/, '').trim();

console.log(r); //=> "This is a command response"