比方说,我有一个字符串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"]
答案 0 :(得分:2)
正则表达式
/[a-z]+|[A-Z]+(?=[A-Z]|$)|([A-Z][a-z]+)/g
[a-z]+
-小写
[A-Z]+(?=[A-Z]|$)
-大写
([A-Z][a-z]+)
- TitleCase
let string = "testTESTCheckTESTAnother"
console.log(string.match(/[a-z]+|[A-Z]+(?=[A-Z]|$)|([A-Z][a-z]+)/g))
答案 1 :(得分:1)
使用以下正则表达式:^[a-z]+|((?![A-Z][a-z])[A-Z])+|[A-Z][a-z]+
在https://regex101.com/r/5r8MzJ/1上查看它的运行情况
说明。我们将捕获三种替代模式。
^[a-z]+
仅在字符串的开头接受一系列小写字母。
((?![A-Z][a-z])[A-Z])+
接受一系列大写字母,但最后一个字母除外,如果后面跟一个小写字母
[A-Z][a-z]+
接受一系列的一个大写字母和至少一个小写字母。