0

假设我有一个字符串testTESTCheckTESTAnother,我想用几句话将它拆分,就像那样["test", "TEST", "Check", "TEST", "Another"]

输入:

只允许使用 [A-Za-z] 字符

testTESTCheckTESTAnother

代码:

我对正则表达式的最佳尝试是:

"testTESTCheckTESTAnother".match(/^[a-z]+|[A-Z][a-z]*/g)
Output: ["test", "T", "E", "S", "T", "Check", "T", "E", "S", "T", "Another"]

我尝试了负前瞻,但它也不起作用:

"testTESTCheckTESTAnother".match(/?![A-Z][a-z]+)[A-Z]+/g)
Output: ["TESTC", "TESTA"]

期望的输出:

["test", "TEST", "Check", "TEST", "Another"]

其他输入输出:

input: "ITest"
output: ["I", "Test"]

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

input: "C"
output: ["C"]
4

2 回答 2

2

正则表达式

/[a-z]+|[A-Z]+(?=[A-Z]|$)|([A-Z][a-z]+)/g

演示

[a-z]+-小写

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

([A-Z][a-z]+)-标题案例

let string = "testTESTCheckTESTAnother"

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

于 2019-11-21T14:32:13.280 回答
1

使用这个正则表达式:^[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]+

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

于 2019-11-21T14:32:26.627 回答