所以我发帖是因为我花了几个小时在一个过滤器上工作,该过滤器应该根据所述消息的开头仅记录某些聊天消息。我已达到约五十五岁的程度,但我对正则表达式缺乏了解,使我无法继续研究它。
基本上,表达式是假设以匹配消息,这些消息是一些恼人的事情之一。如果这太具体了,我很抱歉,我不确定如何让所有条件协同工作。
我设法获得了适用于大多数情况的正则表达式,但我无法在不收到不需要的邮件的情况下使条件 4 工作。 此外,如果消息(以每行的字符串形式接收)以(OOC)开头,则不应该匹配。如果稍后在消息中显示(OOC),那就没问题了。如果字符串以"结束游戏结束。"或者"离开游戏。",它也应该不匹配。
所以...是的,我完全坚持让条件4工作,并希望帮助我做到这一点的社区不会回答一个(希望不是太具体)的问题。它。这是我得到它的表达方式:
(?!^\(OOC\))(_[a-z]+:)|(^[a-z]+:)|(^[a-z]+ [a-z]+ )
它可以匹配上述大多数条件,除了 4 和一些 1 。我无法弄清楚如何获取特定单词(注意:和类型:s)不匹配,4只是弄乱了我的其他一些条件。最后,如果以(OOC)开头,字符串匹配另一个条件,它似乎不会停止匹配。
很抱歉,如果这太具体了,但我完全陷入困境,基本上只是今天拿起了正则表达式。我会带点什么。
修改
示例:
[AT] Smith_Johnson:"你好。" - 条件3下的匹配,正常工作
Tom_Johnson:走到一边。 - 条件2下的匹配,正常工作
注意:私人木门被锁上了。 - 由于条件1而不匹配,但目前
汤姆像傻瓜一样跳来跳去。 - 应在条件4下匹配,不
(OOC)SmithsonsFriend:嘿伙计们,回来 - 匹配,但不应该在不匹配的说明符下
(WHISPER)Bob_Ross:"伙计,这是蹩脚的。" - 条件5
西海岸:这是一个可爱的居住地。 - 由于空白而无法匹配,这很好
乔加入了比赛。 - 匹配,不应该在不匹配的说明符下
编辑两个
澄清:
A)字符串以(OOC)开头 - 从不匹配
B)字符串以(WHISPER)或(SHOUT)开头 - 始终匹配
如果A和B都不适用,则转到条件1-4。
答案 0 :(得分:1)
您可以使用此正则表达式:
^(?:\(shouts\)|\(whisper\))?(?:\[[A-Z]{1,2}\])?(?!Notice|Note)[A-Za-z]*(?:_[A-Za-z]*)?(?::|\s(?![A-Za-z]*:))(?!(?:joined|left) the game)
^
字符串的开头(确保逐行检查)(?:\(shouts\)|\(whisper\))?
允许使用(shouts)
或(whisper)
(?:\[[A-Z]{1,2}\])?
匹配A-Z
内有1个或2个[]
字符的非捕获组,这是可选的(因为最后为?
)(?!Notice|Note)
:单词列表,不属于后续选择器[A-Za-z]*
匹配尽可能多的字母字符(?:_[A-Za-z]*)?
匹配_
后跟字母字符(?::|\s(?![A-Za-z]*:))
与:
或空格字符\s
匹配,但[A-Z]:
(?!(?:joined|left) the game)
否定前瞻:整个正则表达式不匹配,如果此模式匹配 如果您想要,请在正则表达式中添加不区分大小写的标记/i
匹配(whisper)
和(WHISPER)
。
→以下是您在更新 regex101中进行实时测试的示例文本
答案 1 :(得分:1)
不是将它设为一个大的(巨大的)正则表达式,而是可以创建一个接收消息的函数,然后根据一些正则表达式进行检查(非常灵活且更容易实现) 。像这样:
function isValid(msg){
// starts with "WHISPER" or "SHOUT"
if(/^(?:whisper|shout)/i.test(msg)) return true;
// Check if it begins with "notice:" or "type:"
if(/^(?:notice|type)\s*:/i.test(msg)) return false;
// Check if it ends with "joined the game" or "left the game."
if(/(?:joined|left)\s+the\s+game\.?$/i.test(msg)) return false;
// starts with "(ooc)"
if(/^\(ooc\)/i.test(msg)) return false;
// "[at]word:" or "[a]word_word" or "word:" or "word_word" ...
if(/^(?:\[[a-z]{1,2}\])?[a-z_]+:?.*$/i.test(msg)) return true;
return false;
}
示例:强>
function isValid(msg) {
if (/^(?:whisper|shout)/i.test(msg)) return true;
if (/^(?:notice|type)\s*:/i.test(msg)) return false;
if (/(?:joined|left)\s+the\s+game\.?$/i.test(msg)) return false;
if (/^\(ooc\)/i.test(msg)) return false;
if (/^(?:\[[a-z]{1,2}\])?[a-z_]+:?.*$/i.test(msg)) return true;
return false;
}
function check() {
var string = prompt("Enter a message: ");
if(isValid(string))
alert(string + " is valid!");
else
alert(string + " is not valid!");
}
<button onclick="check()">TRY</button>