Так что это будет мой пример:
In Kenya since 2010 <a href="https://www.youtube.com/watch?v=fDTGpMJi0OI&list=PLqGkpApxFsX8k8ENdCr-9v8iRa2q5jXaE&" onclick="yt.www.watch.player.seekTo(2*60+48);return false;">2:48</a>
Where comes from: Bukavu <a href="https://www.youtube.com/watch?v=fDTGpMJi0OI&list=PLqGkpApxFsX8k8ENdCr-9v8iRa2q5jXaE&" onclick="yt.www.watch.player.seekTo(3*60+29);return false;">3:29</a>
She would have been killed <a href="https://www.youtube.com/watch?v=fDTGpMJi0OI&list=PLqGkpApxFsX8k8ENdCr-9v8iRa2q5jXaE&" onclick="yt.www.watch.player.seekTo(5*60+15);return false;">5:15</a>
теперь время m: ss (например, 2:48) должно оставаться там, где они есть, но ТАКЖЕ добавляется к ссылке, которая предшествует ему, после "&" и в следующем формате: 2:48 должно стать t = 2m48s
Итак, в конце, все это должно выглядеть так (проверьте конец ссылок)
In Kenya since 2010 <a href="https://www.youtube.com/watch?v=fDTGpMJi0OI&list=PLqGkpApxFsX8k8ENdCr-9v8iRa2q5jXaE&t=2m48s" onclick="yt.www.watch.player.seekTo(2*60+48);return false;">2:48</a>
Where comes from: Bukavu <a href="https://www.youtube.com/watch?v=fDTGpMJi0OI&list=PLqGkpApxFsX8k8ENdCr-9v8iRa2q5jXaE&t=3m29s" onclick="yt.www.watch.player.seekTo(3*60+29);return false;">3:29</a>
She would have been killed <a href="https://www.youtube.com/watch?v=fDTGpMJi0OI&list=PLqGkpApxFsX8k8ENdCr-9v8iRa2q5jXaE&t=5m15s" onclick="yt.www.watch.player.seekTo(5*60+15);return false;">5:15</a>
Теперь я узнал, я мог бы использовать \ d:.., чтобы найти время, но у меня нет идеи о том, как действовать, или если это вообще возможно с возвышенным текстом?
Обновление 2:
Клянусь, я проверил на YouTube, и я смог перейти к видео с &t=h5m10s
и он будет работать как 0:05:10
. Если вам нужно, чтобы это было 5m10s
или 0h5m10s
, вам нужно сделать два разных выражения (поскольку Sublime Text не позволит вам выполнять сложные функции обратного вызова при замене регулярного выражения).
Для замены h:mm:ss
:
href="(.*?)"(.*?)>(\d*):(\d{2}):(\d{2})
href="$1&t=$3h$4m$5s"$2>$3:$4:$5
Чтобы заменить m:ss
:
href="(.*?)"(.*?)>(\d{1,2}):(\d{2})(?!:\d)
href="$1&t=$3m$4s"$2>$3:$4
Единственным необычным синтаксисом, который нуждается в объяснении, является (?!:\d)
. ?!
синтаксис - это "негативный взгляд". Это означает, что в группе соответствия не последует дополнительная :\d
, иначе это будет соответствовать часам/минутам/секундам.
Обновить:
Вот обновленное выражение для соответствия необязательным часам. Я дважды проверил, и вы можете использовать &t=h##m##s
(т.е. Пустой час, если он не сопоставлен). Это означает, что мы можем сделать один поиск/замену и просто иметь пустой захват за час, если он не существует (вы увидите, что я имею в виду за секунду).
Совпадение:
href="(.*?)"(.*?)>((?:(\d*):)?(\d{1,2}):(\d{2}))
И замените на:
href="$1&t=$4h$5m$6s"$2>$3
Здесь все усложнилось. Давайте рассмотрим деталь, которая изменится:
( # start an overarching capture group
(\d*):? # capture 0+ digits followed by an optional : (hours)
(\d{1,2}): # capture 1-2 digits followed by a : (minutes)
(\d{2}) # capture the last 2 digits (seconds)
) # end the capture group
Теперь вы можете задаться вопросом, почему я использовал эту всеобъемлющую группу захвата. Это связано с тем, что нам нужен способ сохранить содержимое привязки одной и той же. Если мы не использовали это, нам пришлось бы заменять его hour:minute:second
и час могут быть пустыми (значение 3:45
будет заменено на :3:45
).
Вы можете сопоставить это:
href="(.*?)"(.*?)>(\d)+:(\d{2})
И замените его на
href="$1&t=$3m$4s"$2>$3:$4
Как это работает, он сначала находит любой якорный href, захватывая содержимое в первой группе захвата. Затем мы записываем все до >
во вторую группу захвата. Затем мы фиксируем цифру 1+ (третий захват), а затем :
и, наконец, захватываем последние 2 цифры (четвертый захват).
Мы по существу заменяем это всем тем же контентом, но обязательно добавляем &t=$3m$4s
в конец ссылки. Вы можете увидеть рабочий пример в Regex101.