Вот пример использования объекта HTML5 Image, завернутого JQuery. Вызовите функцию загрузки для основного URL-адреса изображения, и если эта загрузка вызывает ошибку, замените атрибут src изображения URL-адресом резервной копии.
function loadImageUseBackupUrlOnError(imgId, primaryUrl, backupUrl) {
var $img = $('#' + imgId);
$(new Image()).load().error(function() {
$img.attr('src', backupUrl);
}).attr('src', primaryUrl)
}
<img id="myImage" src="primary-image-url"/>
<script>
loadImageUseBackupUrlOnError('myImage','primary-image-url','backup-image-url');
</script>
Механизм регулярных выражений пытается сопоставить альтернативы в том порядке, в котором они указаны. Поэтому, когда шаблон (foo|foobar)&?
сразу же foo
, он продолжает поиск совпадений. Следующий бит входной строки - bar& b
, который не может быть сопоставлен.
Другими словами, поскольку foo
является частью foobar
, нет способа (foo|foobar)
когда-либо соответствовать foobar
], так как он всегда будет соответствовать foo
.
Иногда это может быть очень полезным трюком. Шаблон (o|a|(\w))
позволит вам захватить \w
и a
или o
по-другому:
Regex.Replace("a foobar& b", "(o|a|(\\w))", "$2") // fbr& b
foobar
ширеfoo
, потому что любая строка, которая соответствуетfoo
, также будет соответствоватьfoobar
(конечно,foo(bar)?
здесь более разумно). Если вы не пытаетесь использовать трюк, описанный в моем обновленном ответе. – p.s.w.g 2 August 2013 в 14:22