首页 > 解决方案 > 用多个大写字母分割文本

问题描述

我正在尝试拆分这些文本,因为我知道一个单词至少有两个字母。

SAMAndMAX // SAM And MAX
SAMAndMax // SAM And Max
SamAndMax // Sam And Max
SamAndMAX // Sam And MAX

我试过这样做(?=[A-Z][a-z]),但你看不到它不能正常工作。

console.log('SAMAndMAX'.split(/(?=[A-Z][a-z])/).join(' '))
console.log('SAMAndMax'.split(/(?=[A-Z][a-z])/).join(' '))
console.log('SamAndMax'.split(/(?=[A-Z][a-z])/).join(' '))
console.log('SamAndMAX'.split(/(?=[A-Z][a-z])/).join(' '))

我似乎无法弄清楚......知道我做错了什么吗?

标签: regex

解决方案


示例数据的一个选项是使用具有正向后视的交替 |来断言 char az 和正向前瞻来断言 char AZ

请参阅此链接https://caniuse.com/#feat=js-regexp-lookbehind了解lookbehinds 的可用性。

(?=[A-Z][a-z])|(?<=[a-z])(?=[A-Z])

console.log('SAMAndMAX'.split(/(?=[A-Z][a-z])|(?<=[a-z])(?=[A-Z])/).join(' '));
console.log('SAMAndMax'.split(/(?=[A-Z][a-z])|(?<=[a-z])(?=[A-Z])/).join(' '));
console.log('SamAndMax'.split(/(?=[A-Z][a-z])|(?<=[a-z])(?=[A-Z])/).join(' '));
console.log('SamAndMAX'.split(/(?=[A-Z][a-z])|(?<=[a-z])(?=[A-Z])/).join(' '));


推荐阅读