JavaScript正则如何正确匹配大写单词及带单个特殊字符的单词
正则调整方案
你可以使用如下正则实现需求:
const targetStr = 'BMB-001 RING/MESH T-Bar Track T-BAR W/' // 适配需求的正则表达式 const reg = /(?<=^|[\s/])[A-Z]{2,}(?:-[A-Z]+)*|W\/(?=[\s]|$)/g // 匹配结果 const res = targetStr.match(reg) console.log(res) // 输出:['RING', 'MESH', 'T-BAR', 'W/']
正则规则说明
(?<=^|[\s/]):正向零宽回顾断言,限定匹配内容的前缀只能是字符串开头、空格或斜杠/,直接排除了前缀的BMB这类后跟-的无效内容[A-Z]{2,}:匹配2个及以上连续的大写英文字母(?:-[A-Z]+)*:非捕获组,支持匹配连字符加连续大写字母的组合,可重复0次或多次,适配T-BAR这类带连字符的全大写内容|:或逻辑,单独匹配特殊规则的W/W\/(?=[\s]|$):精确匹配W/,同时通过正向零宽前瞻断言限定其后只能是空格或字符串结尾,避免误匹配
原正则存在的问题
- 没有对匹配内容的前缀做限制,导致错误匹配到前缀的
BMB - 字符匹配规则不严谨,没有限定匹配内容的字符必须全为大写+合法连字符,导致出现
T-B这类截断的错误匹配结果 - 没有排除包含小写字母的内容对应的无效匹配
内容的提问来源于stack exchange,提问作者covid 2020
相关产品推荐
相关产品推荐

