ThomasReggi
ThomasReggi

Reputation: 59575

JavaScript Regex does not match exact string

In the example below the output is true. It cookie and it also matches cookie14214 I'm guessing it's because cookie is in the string cookie14214. How do I hone-in this match to only get cookie?

var patt1=new RegExp(/(biscuit|cookie)/i);
document.write(patt1.test("cookie14214"));

Is this the best solution?

var patt1=new RegExp(/(^biscuit$|^cookie$)/i);

Upvotes: 7

Views: 11393

Answers (2)

newfurniturey
newfurniturey

Reputation: 38456

The answer depends on your allowance of characters surrounding the word cookie. If the word is to appear strictly on a line by itself, then:

var patt1=new RegExp(/^(biscuit|cookie)$/i);

If you want to allow symbols (spaces, ., ,, etc), but not alphanumeric values, try something like:

var patt1=new RegExp(/(?:^|[^\w])(biscuit|cookie)(?:[^\w]|$)/i);

Second regex, explained:

(?:                 # non-matching group
    ^               # beginning-of-string
    | [^\w]         # OR, non-alphanumeric characters
)

(biscuit|cookie)    # match desired text/words

(?:                 # non-matching group
    [^\w]           # non-alphanumeric characters
    | $              # OR, end-of-string
)

Upvotes: 6

João Silva
João Silva

Reputation: 91359

Yes, or use word boundaries. Note that this will match great cookies but not greatcookies.

var patt1=new RegExp(/(\bbiscuit\b|\bcookie\b)/i);

If you want to match the exact string cookie, then you don't even need regular expressions, just use ==, since /^cookie$/i.test(s) is basically the same as s.toLowerCase() == "cookie".

Upvotes: 2

Related Questions