Msg Regex

Benchmark created on


Test runner

Ready to run.

Testing in
TestOps/sec
Without json validation
const LIKELY_A_BASIC_FORMAT_RE = /\{\d+\}/;

function likelyUsesABasicFormat(message) {
    return !(message.indexOf('{') !== -1) || LIKELY_A_BASIC_FORMAT_RE.test(message);
}

const msg1 = 'A simple message';
const msg2 = 'A simple message with an argument {0}';
const msg3 = 'A simple message with multiple arguments {0} {1}';
const msg4 = 'This test has: {nbKeys, plural, =0{Zero key} =1{One key} other{# keys}}',
                'a.json.key': '{"previousMonth":"Previous Month","months":["January","February","March","April","May","June","July"]}';

likelyUsesABasicFormat(msg1);
likelyUsesABasicFormat(msg2);
likelyUsesABasicFormat(msg3);
likelyUsesABasicFormat(msg4);
ready
Without json validation Regex
const LIKELY_A_BASIC_FORMAT_RE = /\{\d+\}/;

function isValidJSON(message) {
    // See https://stackoverflow.com/a/3710506/1343257
    return /^[\],:{}\s]*$/.test(
        message
            .replace(/\\["\\/bfnrtu]/g, '@')
            .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?/g, ']')
            .replace(/(?:^|:|,)(?:\s*\[)+/g, ''),
    );
}

function likelyUsesABasicFormat(message) {
    return !(message.indexOf('{') !== -1) || LIKELY_A_BASIC_FORMAT_RE.test(message) || isValidJSON(message);
}

const msg1 = 'A simple message';
const msg2 = 'A simple message with an argument {0}';
const msg3 = 'A simple message with multiple arguments {0} {1}';
const msg4 = 'This test has: {nbKeys, plural, =0{Zero key} =1{One key} other{# keys}}',
                'a.json.key': '{"previousMonth":"Previous Month","months":["January","February","March","April","May","June","July"]}';

likelyUsesABasicFormat(msg1);
likelyUsesABasicFormat(msg2);
likelyUsesABasicFormat(msg3);
likelyUsesABasicFormat(msg4);
ready
Without json validation JSON parse
const LIKELY_A_BASIC_FORMAT_RE = /\{\d+\}/;

function isValidJSON(message) {
try {
JSON.parse(message);
return true;
} catch (e) {
return false;
}
}

function likelyUsesABasicFormat(message) {
    return !(message.indexOf('{') !== -1) || LIKELY_A_BASIC_FORMAT_RE.test(message) || isValidJSON(message);
}

const msg1 = 'A simple message';
const msg2 = 'A simple message with an argument {0}';
const msg3 = 'A simple message with multiple arguments {0} {1}';
const msg4 = 'This test has: {nbKeys, plural, =0{Zero key} =1{One key} other{# keys}}',
                'a.json.key': '{"previousMonth":"Previous Month","months":["January","February","March","April","May","June","July"]}';

likelyUsesABasicFormat(msg1);
likelyUsesABasicFormat(msg2);
likelyUsesABasicFormat(msg3);
likelyUsesABasicFormat(msg4);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.