我有一个字符串需要根据大写字母进行分割,以下是我的代码:
let s = 'OzievRQ7O37SB5qG3eLB';
var res = s.split(/(?=[A-Z])/)
console.log(res);
我有一个字符串需要根据大写字母进行分割,以下是我的代码:
let s = 'OzievRQ7O37SB5qG3eLB';
var res = s.split(/(?=[A-Z])/)
console.log(res);
/[A-Z]+[^A-Z]*|[^A-Z]+/g
来匹配这些块,而不是使用零宽断言模式进行分割,因为后者(在你的情况下,它只是一个正向先行断言的正则表达式)必须检查字符串内的每个位置,而且无法告诉正则表达式在找到lookaround模式后跳过一个位置。
s = 'and some text hereOzievRQ7O37SB5qG3eLB';
console.log(s.match(/[A-Z]+[^A-Z]*|[^A-Z]+/g));
详细信息:
[A-Z]+
- 一个或多个大写ASCII字母[^A-Z]*
- 零个或多个(允许匹配仅大写的块)大写ASCII字母以外的字符|
- 或[^A-Z]+
- 一个或多个大写ASCII字母以外的字符(允许在字符串开头匹配非大写ASCII字母)。g
全局修饰符将使String#match()
返回所有找到的非重叠匹配项。
[^A-Z]+
作为正则表达式的替代部分:'aBc'.match(/[A-Z]+[^A-Z]*|[^A-Z]+/g)
返回["a", "Bc"]
。 - Dmitry Egorov