const regex = /^[A-Z](([a-z0-9]+[A-Z]?)*)$/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('^[A-Z](([a-z0-9]+[A-Z]?)*)$', 'gm')
const str = `ABCD
ABCDE
snake_case
camelCase
2PascalCase
streamIOIO
gREATERDtha
MdeADFAFdsADFads
DeviceSNSD
AabcABCD
AabcABCDabcABCD
ABabcABCD
ABabcABCDabcABCD
ABCabcABCD
ABCabcABCDabcABCDabcABCDabcABCD
ABCDabcABCD
ABCDabcABCDabcABCDabcABCDabcABCD
HTMLParser
ABabcABCDbcABC
ABCDabcABC
ABCDabcAB
ABCDabcA
AaABC
AabcABCabcABC
MoeADFdsADFads
ABCabcABC
ABCabcAB
ABabcABC
ABabcAB
AabcAB
ABCabcABCabcA
ABCabcA
AabcABC
AB
ABC
StreamIO
IOStream
DeviceID
DeviceSNS
IbsReleaseTestVerificationRegressioNSuite
CamelCA
CamelCa_1
Camel01CC01
HELLO
ContextHTMLParser
CreateAMode
CreateBMode
PacalCasePacalCasePacalCasePacalCasePacalCasePacalCase
A
Aabc123
Context
PascalCase
Pascal2Case
PascalCaseA
Pascal2CaseA
ModeA
Mode2A
Mode2A2
Mode2A2A
MadeEasy
WonderFul
AndMe
HtmlParser
H
AaA
Camel01C
Camel01c01
Camel01C01
Camel0a1c1
Camel0a1C1
Camel0ac1b1C1
CamelC
CamelC1
CamelCa1
IbsReleaseTestVerificationRegressionSuite
IbsReleaseTestVerificationRegressioN
XmlHttpRequest
NewCustomerId
InnerStopwatch
SupportsIpv6OnIos
YouTubeImporter
YoutubeImporter
Affine3D`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions