javascript - 在具有首字母缩写词支持的连接大写单词之间插入空格
问题描述
这就是我需要的:
- “DerivateASK”应改为“Derivate ASK”
- “LiquidASKAnalysis”应改为“LiquidASKAnalysis”
我如何实现它?JavaScript 中的任何正则表达式将不胜感激。
直到这里我想出了一个解决方案:
s.replace(/([A-Z][a-z]*)([A-Z]*)/g,'$1 $2').trim()
该解决方案适用于“DerivateASK”(已更改为“Derivate ASK”),但“LiquidASKAnalysis”更改为“Liquid ASKAnalysis”,ASK 后没有空格。
解决方案
您可以使用
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
推荐阅读
- vue.js - Vue.js 和 Bootstrap Modal - 调用 JS
- python - 跨整个项目处理 Python 配置文件
- sockets - 发送强制发送 X 字节的 UDP 数据报
- solr - solr 8“msg”:“错误:未知字段‘语言’”
- json - Angular 显示单个 http 响应
- javascript - V8 console.log 不打印
- javascript - 如何动态填充下拉输入框
- python - 如何为 --user-data-dir 指定唯一值?
- python - 使用 Slack bot 发送具有非 ascii 字符的文件
- css - CSS 过渡和变换样式不适用于移动设备