JSFiddle - React, Tailwind, and code Playground

by zeen

HTML

<script src="http://cdn.jsdelivr.net/xregexp/3.0.0pre/xregexp-all.js"></script>

JavaScript

var expr = /\B@\w+\b/ig;

//var expr = XRegExp('\\B(@\\p{L}+)\\b');

function parse(text) {
    //var a = expr.exec(text);
    return text.match(expr);
    //console.log(XRegExp.matchChain(text, [expr]));
    //return a ? [expr.exec(text)[1]] : a;
}

var tests = [
    {//0
        input: "@simpleuser",
        result: ["@simpleuser"]
    },
    {//1
        input: "Some @user in text",
        result: ["@user"]
    },
    {//2
        input: "Email [email protected]",
        result: null
    },
    {//3
        input: "some @user with email [email protected]",
        result: ["@user"]
    },
    {//4
        input: "breaked email @email.com",
        result: ["@email"]
    },
    {//5
        input: "@several @users here @one more",
        result: ["@several", "@users", "@one"]
    },
    {//6
        input: "@user0123 with numbers",
        result: ["@user0123"]
    },
    {//7
        input: "[email protected] @user, comma @русское_слово",
        result: ["@user", "@русское_слово"]
    }
];


for(var i = 0; i < tests.length; i += 1) {
    var testResult = parse(tests[i].input);
    var expected = tests[i].result;
    if ((expected && testResult && testResult.toString() != expected.toString())
        || (expected == null && expected != testResult))
    {
        throw new Error("test failed: " + testResult);
    }
    
    //console.log(i, "passed", testResult);
}

console.log("All passed");