Я заметил, что apple-juice
должно соответствовать по вашим параметрам, но как насчет apple juice
?Я предполагаю, что если вы проверяете apple juice
, вы все равно хотите, чтобы он потерпел неудачу.
Итак - давайте создадим набор символов, которые будут считаться «границами»:
/[^-a-z0-9A-Z_]/ // Will match any character that is <NOT> - _ or
// between a-z 0-9 A-Z
/(?:^|[^-a-z0-9A-Z_])/ // Matches the beginning of the string, or one of those
// non-word characters.
/(?:[^-a-z0-9A-Z_]|$)/ // Matches a non-word or the end of string
/(?:^|[^-a-z0-9A-Z_])(apple|orange|juice)(?:[^-a-z0-9A-Z_]|$)/
// This should >match< apple/orange/juice ONLY when not preceded/followed by another
// 'non-word' character just negate the result of the test to obtain your desired
// result.
В большинстве разновидностей регулярных выражений \b
считается «границей слова», но стандартный список «словосочетаний» не включает -
, поэтому вам нужно создать пользовательский.Он может совпадать с /\b(apple|orange|juice)\b/
, если вы также не пытались поймать -
...
Если вы тестируете только тесты с "одним словом", вы можете пойти с гораздо более простым:
/^(apple|orange|juice)$/ // and take the negation of this...