如何编写可忽略撇号/连字符开头单词的匹配正则表达式
正则调整方案
最终可用正则
版本1:允许单词末尾带撇号/连字符(适配你的测试用例)
(?<!['-])[a-zA-Z][a-zA-Z'-]*
版本2:要求单词首尾都为英文字母,仅中间可带撇号/连字符
\b[a-zA-Z]+(?:['-][a-zA-Z]+)*\b
匹配规则说明
- 首字符强制限定为英文字母,天然排除了以撇号、连字符开头的单词,符合整词排除的要求
- 中间及末尾可自由出现英文字母、撇号、连字符,适配
It's、mother-in-law、parents'这类场景 - 对测试用例中的
'hellp、--Mom会直接整体忽略,不会出现仅跳过开头符号、匹配剩余内容的问题
原正则问题说明
你原先的正则存在两个核心问题:
- 负向先行断言
(?!^['-]+\w)锚定了字符串起始位置^,只能校验整个字符串开头是否有撇号/连字符,无法校验字符串中间的单词开头是否有这两个字符 - 没有严格限制单词首字符必须为字母,遇到
'hellp这类内容时,会跳过开头的撇号,直接匹配后面的hellp,不符合预期
内容的提问来源于stack exchange,提问作者Maor Biton
相关产品推荐
相关产品推荐

