Будет разница в привязке переменной scope. Если вы измените obj позже, вы измените возвращаемое значение key2:
var newobj = obj;
obj = { key1: "new" };
alert(newobj.key2());
Теперь он предупреждает «новые работы!», Потому что даже если вы вызываете key2()
на исходном объекте (который теперь newobj
), ссылка на obj.key1
теперь привязывается к значению нового экземпляра obj
. Использование this
предотвращает это.
Не зная о синтаксисе конечного повторения, ваш собственный навык решения задач должен привести вас к следующему:
([a-z])\1\1\1
Очевидно, что это некрасиво, но:
Эй, ребята, классные ответы, но у меня есть одна проблема
"ffffffff". matches("([a-z])\\\1{3,}") = true
"fffffasdf".matches("([a-z])\\\1{3,}") = false
"asdffffasdf".matches("([a-z])\\\1{3,}") = false
Что я могу сделать для двух нижних?
Проблема в том, что в Java, matches
должны соответствовать всей строке; это как если бы шаблон был окружен ^
и $
.
К сожалению, не существует String.containsPattern(String regex)
, но вы всегда можете использовать трюк с окружением шаблона символами .*
:
"asdfffffffffasf".matches(".*([a-z])\\1{3,}.*") // true!
// ^^ ^^
Общий шаблон регулярного выражения для предопределенного повторения - {4}
.
Таким образом, здесь ([a-z]) \ 1 {3} должно соответствовать вашим 4 символам.
Вы хотите сопоставить один символ, а затем этот символ повторить еще три раза:
([a-z])\1{3}
Примечание. В Java вам нужно избегать обратной косой черты внутри обычного выражения.
Обновление . Причина, по которой он не выполняет то, что вы хотите, заключается в том, что вы используете метод соответствует
, который требует, чтобы строка точно соответствовала регулярному выражению, а не просто содержала регулярное выражение. Вместо этого для проверки на сдерживание следует использовать класс Matcher
. Вот пример кода:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Program
{
public static void main(String[] args)
{
Pattern pattern = Pattern.compile("([a-z])\\1{3}");
Matcher matcher = pattern.matcher("asdffffffasdf");
System.out.println(matcher.find());
}
}
Результат:
true
Вы можете поместить {n}
после того, как что-то соответствует ему n
раз, так:
([a-z])\1{3}