Что сказал gnarf, за исключением того, что JavaScript не поддерживает регулярные выражения (по крайней мере, мои реализации IE и FF JavaScript не поддерживают, или я неправильно копирую и вставляю), поэтому я не могу проверить это как написано без исключения. Таким образом, я разбил выражение на две части для обработки различных случаев:
1) начиная с?, В каком случае? сохраняется, но следующий & нет, и
2) начиная с &, в этом случае ведущий & не сохраняется, а следующий & есть.
Пока я убрал ожидание, что за foo = последует что угодно, кроме, возможно, & запуска следующего параметра. Обратите также внимание на то, что есть немного прощения за пробелы.
el.src = el.src.replace(/(\?)foo=[^&]*&?|&foo=[^&]*(&?)/, '$1$2');
Я проверил это с помощью следующих строк src:
"image/1533?foo=1&bar=2$zot=3"
"image/1533?foo=&bar=2$zot=3"
"image/1533?bar=2$zot=3&foo=1"
"image/1533?bar=2$zot=3&foo="
"image/1533?bar=2$zot=3&foo=1&another=123"
"image/1533?bar=2$zot=3&foo=&another=123"
И получил эти результаты:
"image/1533?bar=2$zot=3"
"image/1533?bar=2$zot=3"
"image/1533?bar=2$zot=3"
"image/1533?bar=2$zot=3"
"image/1533?bar=2$zot=3&another=123"
"image/1533?bar=2$zot=3&another=123"
Удачи!