前几天我做了regex golf,任务是在字符串末尾匹配'u'而不使用$
。目标是匹配“fu”,“豆腐”和“snafu”,但不是“futz”,“fusillade”,“functional”或“discombobulated”。
我想出了fu[^tsn]
,regex101;然而,它没有通过测试,因为它由于某种原因不匹配任何“fu”,“豆腐”和“snafu”。我想知道为什么它不起作用,如果有一种更聪明的方法可以解决这个问题(奖励:有没有使用$
的现实生活情况会更好)。
答案 0 :(得分:8)
您可以在https://stackoverflow.com/a/22944075/224671中找到可用的正则表达式元素列表。有些你可以尝试通过RegexGolf测试:
\b
:匹配单词边界,假设输入始终是单个单词\z
或\Z
:匹配字符串的结尾(注意:JavaScript不支持) (?!.)
:负面预测,只要没有下一个字符就匹配,语义上等同于$
。你的正则表达式工作的原因"在regex101中,因为[^tsn]
与fu
旁边的换行符匹配。但是在RegexGolf中它期望fu
成为整个输入,因此匹配失败。因此在使用regex101进行测试时要小心。也许最好切换到"单元测试"在你的情况下模式。