Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于在聊天室中标记玩家的正则表达式_Javascript_Regex - Fatal编程技术网

Javascript 用于在聊天室中标记玩家的正则表达式

Javascript 用于在聊天室中标记玩家的正则表达式,javascript,regex,Javascript,Regex,我有以下正则表达式模式,可以找到一个人在消息中标记的所有玩家: /(? 这里匹配的组是3,因为它是第三组括号。也许: (?:[@](?:[a-zA-Z0-9]){1,16}[ ]){1,}(.*) 如果消息中还包括多行: (?:[@](?:[a-zA-Z0-9]){1,16}[ ]){1,}((?:.|\s)*) 注意:这些不会从正文中间拉出用户名 如果要提取所有引用的用户名: /(?:(@\w{1,16})\b){1,}/g 现在你的只会拔出最后一个 编辑 事实上,在那里使用最后一个正则

我有以下正则表达式模式,可以找到一个人在消息中标记的所有玩家:

/(?
这里匹配的组是3,因为它是第三组括号。

也许:

(?:[@](?:[a-zA-Z0-9]){1,16}[ ]){1,}(.*)
如果消息中还包括多行:

(?:[@](?:[a-zA-Z0-9]){1,16}[ ]){1,}((?:.|\s)*)
注意:这些不会从正文中间拉出用户名

如果要提取所有引用的用户名:

/(?:(@\w{1,16})\b){1,}/g
现在你的只会拔出最后一个

编辑

事实上,在那里使用最后一个正则表达式:

函数getUsernamesAndBody(消息){ 设正则表达式=/(?:(@\w{1,16})\b){1,}/g, 信息={ 正文:信息, 用户名:[] } 做{ match=regex.exec(消息); 如果(匹配){ info.usernames.push(匹配[1]) } }while(匹配); info.usernames.forEach((用户名)=>{ info.body=info.body.replace(用户名“”).trim(); }); 返回信息 } 让fullMessage=`@benjamin@tyler@joe@nic你好!你好@john 大家好`; log(getUsernamesAndBody(fullMessage))
我相信这是可行的


console.log(/([@]([a-zA-Z0-9]){1,16}[]){1,}(.|\s)*)/exec(@benjamin@tyler@joe@nic Hello\nnewlines也能用!oi*)和hjoi[JPOIJ(N#*任何字符都能用!即使是@symbol!”)[3])
(?:[^\W}{1,16}+)+/code>较短。注意,这与凯尔的答案不匹配(这正是我自己想要做的)生成正确的解决方案,该解决方案匹配换行符和其他字符,包括@符号,同时返回组并打印,而不是将其保留在非捕获括号中。@Feathercrown非常确定
匹配任何字符。为什么您认为它不匹配@?…OP可能还可以找到如何添加如果他们想要换行。据我们所知,他们的消息可能在没有换行的情况下存储……我注意到你一直在使用非捕获括号,这意味着你实际上无法提取任何内容……(我在很多信息上使用非捕获,因为其中的信息没有被请求捕获,所以为什么要存储你不需要的数据?“然而,我想要一个方法来抓取…消息体”它被请求了。消息体被捕获,用户名被删除not@Feathercrown添加了my username Capture的示例用法,实际使用字符串并调用
.replace(regex.))
可能是最好的选择…甚至在性能方面也是如此警告:lookbehind还没有被浏览器广泛实现和采用。不要使用它们。
(?我想我已经开始更好地理解正则表达式了。因此,整个字符串可以是一个“匹配”,但可以捕获多个“组”“并在请求时返回它们,使lookarounds不是非常必要吗?效果很好。如果我们将较少的组作为捕获(这是我刚刚在这里学到的。例如,
/(?:[@](?:[a-zA-Z0-9]){1,16}[]{1,}((?:.|\s)*)/
将只作为一个组捕获消息的主体,这会更干净一些。”。
/(?:(@\w{1,16})\b){1,}/g