首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单字大写、PascalCase和camelCase的匹配

单字大写、PascalCase和camelCase的匹配
EN

Stack Overflow用户
提问于 2019-11-21 13:44:28
回答 2查看 265关注 0票数 0

假设我有一个字符串testTESTCheckTESTAnother,我想用几个词来分割它,比如那个["test", "TEST", "Check", "TEST", "Another"]

输入:

只允许A字符

代码语言:javascript
运行
复制
testTESTCheckTESTAnother

代码:

我对regex最好的尝试是:

代码语言:javascript
运行
复制
"testTESTCheckTESTAnother".match(/^[a-z]+|[A-Z][a-z]*/g)
Output: ["test", "T", "E", "S", "T", "Check", "T", "E", "S", "T", "Another"]

我尝试了负面展望,但也没有奏效:

代码语言:javascript
运行
复制
"testTESTCheckTESTAnother".match(/?![A-Z][a-z]+)[A-Z]+/g)
Output: ["TESTC", "TESTA"]

期望产出:

代码语言:javascript
运行
复制
["test", "TEST", "Check", "TEST", "Another"]

其他投入-产出:

代码语言:javascript
运行
复制
input: "ITest"
output: ["I", "Test"]

input: "WHOLETESTWORD"
output: ["WHOLETESTWORD"]

input: "C"
output: ["C"]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-21 14:32:26

使用以下正则表达式:^[a-z]+|((?![A-Z][a-z])[A-Z])+|[A-Z][a-z]+

https://regex101.com/r/5r8MzJ/1上看到它的动作

解释一下。我们有三种模式,我们将捕捉到。

  1. ^[a-z]+

只接受字符串开头的一系列小写字母。

  1. ((?![A-Z][a-z])[A-Z])+

接受一系列大写字母,但最后一个字母除外,如果后面是小写字母

  1. [A-Z][a-z]+

接受一系列大写字母和至少一个小写字母。

票数 1
EN

Stack Overflow用户

发布于 2019-11-21 14:32:13

Regex

代码语言:javascript
运行
复制
/[a-z]+|[A-Z]+(?=[A-Z]|$)|([A-Z][a-z]+)/g

[a-z]+ - Lowercase

[A-Z]+(?=[A-Z]|$) -大写

([A-Z][a-z]+) - TitleCase

代码语言:javascript
运行
复制
let string = "testTESTCheckTESTAnother"

console.log(string.match(/[a-z]+|[A-Z]+(?=[A-Z]|$)|([A-Z][a-z]+)/g))

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58976460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档