В принципе вы просто insertBefore
ваш элемент, который вы нажали, перед его предыдущим дочерним элементом. Однако наличие пробелов в текстовых узлах делает это более раздражающим, чем должно быть в традиционных сценариях. API-интерфейс Element Traversal API сделает это проще, но пока он не будет более широко поддерживаться в браузерах, необходимы вспомогательные функции, например: .:3d3]
& lt; div id = " контейнер "& GT; & Lt; & DIV GT; 1 & Lt; / дел & GT; & Lt; & DIV GT; 2 & Lt; / дел & GT; & Lt; & DIV GT; 3 & л; / дел & GT; & Lt; / дел & GT; & lt; script type = "text / javascript" & gt; // Привязать событие к каждой строке div // var div = firstElementChild (document.getElementById ('container')); while (div! == null) {div.onclick = swapWithPreviousElement; div = nextElementSibling (div); } // Переместить элемент перед его предыдущим элементом sibling // function swapWithPreviousElement () {var previous = previousElementSibling (this); if (previous! == null) this.parentNode.insertBefore (это, предыдущий); } // Мы использовали некоторые API-интерфейсы Element Traversal, но некоторые // браузеры еще не поддерживают их. Предоставьте функции обертки // для совместимости. // function previousElementSibling (element) {if ('previousElementSibling' в элементе) return element.previousElementSibling; do element = element.previousSibling; while (element! == null & amp; & amp; element.nodeType! == 1); возвратный элемент; } function nextElementSibling (element) {if ('nextElementSibling' в элементе) return element.nextElementSibling; do element = element.nextSibling; while (element! == null & amp; & amp; element.nodeType! == 1); возвратный элемент; } function firstElementChild (element) {if ('firstElementChild' в элементе) return element.firstElementChild; var child = element.firstChild; while (child! == null & amp; & amp; child.nodeType! == 1) child = child.nextSibling; возвращение ребенка; } & lt; / script & gt;
Используйте следующее регулярное выражение с одной группой захвата в качестве примера ([Pp]attern)
.
Ниже приведены 4 примера того, как указать с именем захват группы для регулярного выражения выше:
(?<Name>[Pp]attern)
(?<group1>[Pp]attern)
(?<name>[Pp]attern)
(?<NAME>[Pp]attern)
Обратите внимание, что имя группы захвата должно строго соответствовать следующему шаблону:
[A-Za-z][A-Za-z0-9]*
Имя группы чувствительно к регистру, поэтому вы должны указать точное имя группы, когда вы обращаетесь к ним (см. ниже).
В обратная ссылка содержимого, сопоставленного именованной группой захвата в регулярном выражении (соответствует 4 приведенным выше примерам):
\k<Name>
\k<group1>
\k<name>
\k<NAME>
Именованная группа захвата по-прежнему нумеруется, поэтому во всех 4 примерах он может быть обратным ссылкой с \1
в соответствии с нормальным.
К относятся к группе захвата в заменяющей строке (соответствуют 4 приведенным выше примерам):
${Name}
${group1}
${name}
${NAME}
То же, что и abov е, во всех 4 примерах содержание группы захвата можно ссылаться на $1
в заменяющей строке.
Использование (?<name>[Pp]attern)
в качестве примера для этого раздела.
Реализация Oracle в режиме COMMENT
(встроенный флаг (?x)
) анализирует следующие примеры как идентичные регулярному выражению выше:
(?x) ( ?<name> [Pp] attern )
(?x) ( ?< name > [Pp] attern )
(?x) ( ?< n a m e > [Pp] attern )
За исключением ?<
, который нельзя отделять, он допускает произвольное расстояние даже между именем группы захвата.
Хотя в .NET, Perl и PCRE можно определить одно и то же имя для разных групп захвата, в настоящее время он не поддерживается в Java (Java 8). Вы не можете использовать одно и то же имя для разных групп захвата.
Новые методы в классе Matcher для поддержки получения захваченного текста по имени группы:
group(String name)
(из Java 7) start(String name)
(из Java 8) end(String name)
(из Java 8) Соответствующий метод отсутствует в классе MatchResult
с Java 8. Существует текущий запрос для JDK-8065554 для этой проблемы.
В настоящее время нет API для получения списка названных групп захвата в регулярном выражении. Мы должны перепрыгнуть через дополнительные обручи, чтобы получить его . Хотя для большинства целей это совершенно бесполезно, за исключением написания тестера регулярных выражений.
Новый синтаксис для именованной группы захвата - (?<name>X)
для сопоставимой группы X, названной «имя». Следующий код захватывает регулярное выражение (\ w +) (любая группа буквенно-цифровых символов). Чтобы назвать эту группу захвата, вы должны добавить выражение? в круглых скобках перед захватом регулярного выражения.
Pattern compile = Pattern.compile("(?<teste>\\w+)");
Matcher matcher = compile.matcher("The first word is a match");
matcher.find();
String myNamedGroup= matcher.group("teste");
System.out.printf("This is yout named group: %s", myNamedGroup);
Этот код возвращает следующие выходные данные:
Это ваша именованная группа:
blockquote>