Вы можете объяснить? [закрыто]

avatar
Bartek Zakrzewski
8 августа 2021 в 22:33
45
1
-3

function isIsogram(str){ 
  return !/(\w).*\1/i.test(str)
}

особенно часть !/(\w).*\1/i.test(str)

Источник
Sebastian Simon
8 августа 2021 в 22:39
0

See What does this symbol mean in JavaScript?, the docs on MDN about expressions and operators and statements, What does this regex mean?, the regex tag wiki, use regex debuggers like RegEx101, read the ES spec, the JS docs, and JS tutorials.

Roko C. Buljan
8 августа 2021 в 22:42
0

Протестируйте регулярное выражение на regex101.com/r/nkx56s/1 На боковой панели есть все, что вам нужно знать. После того, как вы увидите, что соответствует, и поскольку .test() возвращает логическое значение, !boolean является как раз обратным. Если бы ваша функция была названа, скажем, isNotIsogram, тогда ведущий оператор Logical Not ! был бы ненужным.

Ответы (1)

avatar
Kelvin Schoofs
8 августа 2021 в 22:37
1

Изограмма — это слово, в котором каждая буква встречается не более одного раза.

Регулярное выражение /(\w).*\1/i можно разделить на 3 части:

  • (\w): найдите любой «символ слова», то есть буквенно-цифровой символ (или символ подчеркивания), и сохраните его как группу. Это первая группа, поэтому группа 1.
  • .*: соответствует любому количеству символов, независимо от (кроме новые строки)
  • \1: повторное соответствие первой группе

/i означает, что регулярное выражение нечувствительно к регистру. Конечным результатом является то, что это регулярное выражение проверяет, может ли оно найти одну букву (соответствующую \w) и может ли она снова найти точно такую ​​же букву позже (соответствующую \1).

.

regex.test(str) просто означает "соответствует ли эта строка этому регулярному выражению?" в то время как ! инвертирует результат, так что в итоге у вас есть return (not "is there a letter that appears twice?"), иначе изограмма.