首页 > 解决方案 > 在具有首字母缩写词支持的连接大写单词之间插入空格

问题描述

这就是我需要的:

我如何实现它?JavaScript 中的任何正则表达式将不胜感激。

直到这里我想出了一个解决方案:

 s.replace(/([A-Z][a-z]*)([A-Z]*)/g,'$1 $2').trim()

该解决方案适用于“DerivateASK”(已更改为“Derivate ASK”),但“LiquidASKAnalysis”更改为“Liquid ASKAnalysis”,ASK 后没有空格。

标签: javascriptregex

解决方案


您可以使用

s.replace(/(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/g, ' ')

Unicode 感知等价物:

s.replace(/(?<=\p{Ll})(?=\p{Lu})|(?<=\p{Lu})(?=\p{Lu}\p{Ll})/gu, ' ')

请参阅正则表达式演示。Note\p{Lu}匹配任何大写 Unicode 字母并\p{Ll}匹配任何 Unicode 小写字母。

详情

  • (?<=[a-z])(?=[A-Z])- 小写 ASCII 字母和大写 ASCII 字母之间的位置
  • |- 或者
  • (?<=[A-Z])(?=[A-Z][a-z])- 大写 ASCII 字母和大写 ASCII 字母后跟小写 ASCII 字母之间的位置。

JavaScript 演示:

const string = 'DerivateASK, LiquidASKAnalysis';
const regex = /(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/g;
console.log(string.replace(regex, ' '));
// => Derivate ASK, Liquid ASK Analysis


推荐阅读