如何基于大写字母拆分字符串?

时间:2017-03-15 08:50:54

标签: javascript regex split

我有一个字符串,我需要根据大写字母拆分,我的代码在下面



let s = 'OzievRQ7O37SB5qG3eLB';
var res = s.split(/(?=[A-Z])/)
console.log(res);




但是有一个转折,如果大写字母是连续的,我需要正则表达式" eat"直到此序列结束。在上面的示例中,它返回

.. R,Q7,O37,S,B5Q,G3E,L,B

结果应该是

RQ7,O37,SB5q,G3E,LB

思考?谢谢。

1 个答案:

答案 0 :(得分:5)

您需要将这些块与/[A-Z]+[^A-Z]*|[^A-Z]+/g匹配,而不是使用零宽度断言模式进行拆分,因为后者(在您的情况下,它只是一个正向前导的正则表达式)将必须检查内部的每个位置字符串,一旦找到环绕模式,就不可能告诉正则表达式跳过一个位置。

s = 'and some text hereOzievRQ7O37SB5qG3eLB';
console.log(s.match(/[A-Z]+[^A-Z]*|[^A-Z]+/g));

请参阅online regex demo at regex101.com

<强>详情:

  • [A-Z]+ - 一个或多个大写ASCII字母
  • [^A-Z]* - 零或更多(仅允许匹配大写字母块)除大写ASCII字母以外的字符
  • | - 或
  • [^A-Z]+ - 除大写ASCII字母以外的一个或多个字符(以允许在字符串开头匹配非大写ASCII字母。

g全局修饰符会让String#match()返回所有找到的非重叠匹配。