I'm trying to use regex to find any incomplete things that begin with {{
.
I've tried to check for any places in the string that begin with {{
and have a-Z after it but haven't been ended (}}
). What I'm trying always returns null.
string = 'Hello {{name}}, you are {{a';
console.log(string.match(/^({{)?[a-z]:[A-Z]$/g));
My expected output would be {{a
in this case because {{name}}
is complete. Any help really appreciated.
The only things it will have between it is .
ie: {{name.forename}}
{{name.lastname}}
CodePudding user response:
You can use the "best regex trick ever", in this case, match all word char chunks between double curly braces or match and capture any {{
followed with zero or more word chars:
Array.from(text.matchAll(/{{\w (?:\.\w )*}}|({{(?:\w (?:\.\w )*)?)/g), x => x[1]).filter(Boolean)
Here,
{{\w (?:\.\w )*}}
-{{
, one or more word chars, zero or more sequences of a.
and one or more word chars,}}
|
- or({{(?:\w (?:\.\w )*)?)
- Group 1:{{
and an optional occurrence of one or more word chars and zero or more sequences of a.
and one or more word chars.