Question

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);
Was it helpful?

Solution

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
)

OTHER TIPS

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".

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top