Вот так вроде работает
var url1='http://example.com/model/catalog?pid=807&id=123&on=87';
var url2='http://example.com/model/catalog?pid=807?id=123&on=87';
var url3='http://example.com/model/catalog?pid=807id=123&on=87';
var id = 999;
console.log(url1.replace(/(\W)(id=)\d+/, '$1$2'+id))
console.log(url2.replace(/(\W)(id=)\d+/, '$1$2'+id))
console.log(url3.replace(/(\W)(id=)\d+/, '$1$2'+id))
// [url]http://example.com/model/catalog?pid=807&id=999&on=87[/url]
// [url]http://example.com/model/catalog?pid=807?id=999&on=87[/url]
// [url]http://example.com/model/catalog?pid=807id=123&on=87[/url]
особо не парился, ибо ты не достоин
Зы не не работает в последней строке, только что заметил