This is an example of what the regex would and wouldn't match:
# Matches
AAAA: aaaa
# Matches
ABCD: abcd
# Doesn't match
AAAA: abcd
# Doesn't match
AAAA: AaAa
How can I accomplish this?
I found this, but it doesn't work for matches because \L
transforms the matches in the replace. Besides, \L
seems to be only available in PHP and not in Javascript:
This works, but only when the case-insensitive option is set and it matches the last example:
(\w+): \1
You might be able to use case-sensitivity switch and lookahead. eg.
\b(?=[A-Z]+:\s*[a-z]+)(?i)(\w+):\s*\1\b
or
\b(?=\p{Lu}+:\s*\p{Ll}+)(?i)(\p{L}+):\s*\1\b
Essentially you use 2 regexes at once.
(?=...)
) asserts that the first word is all uppercase ([A-Z]+
or \p{Lu}+
) and that the second word is all lowercase ([a-z]+
or \p{Ll}+
).(?i)
.The \b
prevent matches on input like: xxAAA: aaayy
Note: As the question mentioned VSCode, this answer uses .NET-style regex and assumes that the i
modifier is initially turned off but can be toggled. However, I don't think this is possible in ECMAScript ("flags are an integral part of a regular expression. They cannot be added or removed later").