const regex = /(?<key>\w*) # The key.
\s*:\s* # : with optional spaces around.
(?<value> # The value.
# A string value, single or double-quoted:
(?<quote>["']) # Capture the double or single quote.
(?:\\.|.)*? # Backslash followed by anything or any char, ungreedy.
\k<quote> # The double or single quote captured before.
|
# Int and float numbers:
(?<number>[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)
|
# true, false and null (or other constants):
(?<constant>true | false | null)
)/g;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(?<key>\\w*) # The key.
\\s*:\\s* # : with optional spaces around.
(?<value> # The value.
# A string value, single or double-quoted:
(?<quote>["\']) # Capture the double or single quote.
(?:\\\\.|.)*? # Backslash followed by anything or any char, ungreedy.
\\k<quote> # The double or single quote captured before.
|
# Int and float numbers:
(?<number>[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?)
|
# true, false and null (or other constants):
(?<constant>true | false | null)
)', 'g')
const str = `# OK for very simple stuff, such as this:
{
float: 'null',
another: "foo",
age: 45,
type: '"simple" \\' quote',
comment: "Hello,\\nA backslash \\\\, a tab \\t and a \\"dummy\\" word.\\nOk?",
important: true,
weight: 69.7,
negative: -2.5
}
Not ok for complex stuff:
{
subStaff: {
help: true,
}
}`;
// 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