如下图中所示,匹配的词语是“Test”、“123”和“测试”。
当匹配成功时,紧跟在匹配词前面的任何数字都会被包含在匹配结果中,即使是 Unicode 字符也一样。
紧跟在匹配词后面的数字不具有这种行为;
这也影响了数字匹配,包括字符串仅由英文字母和数字组成的情况。例如,“Test123”只能匹配“Test”,但不能匹配“123”或“Test123”(它本身)。
我可能有点跟不上进度了——这是什么类型的匹配规则?有人能给我解释一下吗?
1 个赞
这看起来像是一个潜在的正则表达式错误,这类错误总是有点棘手。@zogstrip 也许你可以看一下,因为你最近在这个领域工作过(尽管这似乎已经存在一段时间了)。
我的理解是这样的……
当我们检查单词时,有 3 个部分必须匹配:前导、单词、尾随。我们将前导和尾随设置为非字母字符……这些可以是标点符号、空格,或者数字。数字是导致匹配出错的原因。本意是即使单词前后有标点符号或其他字符,也能捕获到该单词。
所以正则表达式看到了 123Test,找到了 Test,查看它前面发现 3,这匹配为一个“非字母”,然后查看后面发现单词的结尾。因此它匹配了 3Test。
我认为我们需要检查前导/尾随部分中的非字母和非数字字符,以避免这种情况?不确定我们没有包含数字的原因,还是这只是一个疏忽。
2 个赞
这次应该能把问题彻底解决。我们之前在 Ruby 版本和 JS 版本使用的正则表达式之间存在一些不一致,但现在不再需要了。
3 个赞